چگونه آرایه JSON را برای تبدیل به اکسل با C# صاف کنیم
هنگام کار با API های مدرن و خدمات وب، توسعهدهندگان به طور مکرر با ساختارهای پیچیده JSON با آرایهها و اشیاء تو در تو مواجه میشوند. تبدیل این ساختارهای سلسلهمراتبی به جداول اکسل مسطح چالشهای قابل توجهی را به همراه دارد. این راهنما نشان میدهد که چگونه میتوان آرایههای تو در تو JSON را به طور مؤثر به اکسل تبدیل کرد با استفاده از Aspose.Cells for .NET.
چالش: ساختارهای پیچیده JSON تو در تو
این پاسخ JSON معمولی از یک API وب را در نظر بگیرید:
{
"company": "Acme Corp",
"departments": [
{
"name": "Engineering",
"employees": [
{
"id": 101,
"name": "John Smith",
"skills": ["C#", "ASP.NET", "Azure"]
},
{
"id": 102,
"name": "Jane Doe",
"skills": ["JavaScript", "React", "Node.js"]
}
]
},
{
"name": "Marketing",
"employees": [
{
"id": 201,
"name": "Michael Johnson",
"skills": ["Content Strategy", "SEO", "Analytics"]
}
]
}
]
}
تبدیل این دادههای سلسلهمراتبی به یک جدول اکسل مسطح چالشهای متعددی را ایجاد میکند:
- چگونه با آرایههای تو در تو متعدد (بخشها، کارمندان، مهارتها) برخورد کنیم
- چگونه روابط بین آیتمهای والد و فرزند را حفظ کنیم
- چگونه ساختار صفحهگسترده خوانا ایجاد کنیم
راهحل گام به گام
گام 1: نصب Aspose.Cells
ابتدا Aspose.Cells for .NET را نصب کنید:
dotnet add package Aspose.Cells
گام 2: تنظیم JsonLayoutOptions
JsonLayoutOptions به درستی پیکربندی شده را برای مدیریت آرایهها ایجاد کنید:
using Aspose.Cells;
using Aspose.Cells.Utility;
// ایجاد JsonLayoutOptions با مدیریت آرایه
JsonLayoutOptions options = new JsonLayoutOptions();
options.ArrayAsTable = true; // برای صاف کردن مناسب بسیار مهم است
options.ConvertNumericOrDate = true;
options.IgnoreNull = true;
گام 3: بارگذاری دادههای JSON پیچیده
دادههای JSON تو در تو پیچیده خود را بارگذاری کنید:
// JSON نمونه با آرایههای تو در تو
string jsonData = File.ReadAllText("complex_data.json");
// راهاندازی کاربرگ و ورکبوک
Workbook workbook = new Workbook();
Worksheet worksheet = workbook.Worksheets[0];
گام 4: پیکربندی صاف کردن پیشرفته
برای ساختارهای تو در تو پیشرفته، یک راهحل صاف کردن سفارشی پیادهسازی کنید:
// تعریف موقعیت سلول شروع
int startRow = 0;
int startColumn = 0;
// وارد کردن دادههای JSON با گزینههای پیکربندی شده ما
JsonUtility.ImportData(jsonData, worksheet.Cells, startRow, startColumn, options);
گام 5: مدیریت آرایههای تو در تو چند سطحی
برای آرایههای پیچیده چند سطحی، به پردازش اضافی نیاز داریم:
// ایجاد یک کاربرگ دوم برای دادههای کارمندان دقیق
Worksheet employeeSheet = workbook.Worksheets.Add("Employees");
int empRow = 0;
// افزودن هدرها برای کاربرگ کارمندان
string[] headers = { "Department", "Employee ID", "Employee Name", "Skills" };
for (int i = 0; i < headers.Length; i++)
{
employeeSheet.Cells[empRow, i].PutValue(headers[i]);
}
empRow++;
// تجزیه JSON برای استخراج و صاف کردن دادههای کارمندان
// توجه: این نیاز به یک کتابخانه تجزیه JSON مانند Newtonsoft.Json دارد
// JObject root = JObject.Parse(jsonData);
// foreach (var dept in root["departments"])
// {
// string deptName = dept["name"].ToString();
// foreach (var emp in dept["employees"])
// {
// employeeSheet.Cells[empRow, 0].PutValue(deptName);
// employeeSheet.Cells[empRow, 1].PutValue((int)emp["id"]);
// employeeSheet.Cells[empRow, 2].PutValue(emp["name"].ToString());
// employeeSheet.Cells[empRow, 3].PutValue(string.Join(", ", emp["skills"].ToObject<string[]>()));
// empRow++;
// }
// }
گام 6: اعمال فرمتبندی حرفهای
خوانایی را با فرمتبندی مناسب افزایش دهید:
// فرمت کردن هر دو کاربرگ به عنوان جدول با هدرها
worksheet.ListObjects.Add(0, 0, worksheet.Cells.LastCell.Row, worksheet.Cells.LastCell.Column, true);
employeeSheet.ListObjects.Add(0, 0, empRow - 1, 3, true);
// تنظیم خودکار عرض ستونها برای خوانایی بهتر
worksheet.AutoFitColumns();
employeeSheet.AutoFitColumns();
گام 7: ذخیره نتیجه
وارد کردن ورکبوک با دادههای صاف شده:
// ذخیره به عنوان فایل اکسل
workbook.Save("flattened_data.xlsx");
یک راهحل سادهشده با استفاده از Aspose.Cells
برای بسیاری از سناریوها، Aspose.Cells یک رویکرد سادهتر با استفاده از مدیریت JSON داخلی خود ارائه میدهد:
// راهاندازی کاربرگ
Workbook workbook = new Workbook();
Worksheet sheet = workbook.Worksheets[0];
// پیکربندی گزینههای واردات JSON
JsonLayoutOptions options = new JsonLayoutOptions
{
ArrayAsTable = true,
ConvertNumericOrDate = true,
IgnoreNull = true,
TitleStyle = new CellsFactory().CreateStyle(),
NestedArrayAsTable = true // برای آرایههای تو در تو مهم است
};
// تنظیم سبک عنوان برای خوانایی بهتر
options.TitleStyle.Font.IsBold = true;
// وارد کردن JSON
JsonUtility.ImportData(jsonData, sheet.Cells, 0, 0, options);
// ذخیره نتیجه
workbook.Save("flattened_output.xlsx");
نکات کلیدی و بهترین شیوهها
- از
ArrayAsTable = true
استفاده کنید - این برای نمایندگی صحیح آرایهها ضروری است - برای دادههای سلسلهمراتبی پیچیده، ایجاد چندین کاربرگ را در نظر بگیرید
- فرمتبندی را اعمال کنید تا خروجی خواناتر شود
- از
NestedArrayAsTable = true
استفاده کنید زمانی که در دسترس باشد برای مدیریت بهتر ساختارهای تو در تو - برای ساختارهای فوقالعاده پیچیده، پیشپردازش JSON قبل از وارد کردن را در نظر بگیرید
مشکلات رایج و راهحلها
مشکل | راهحل |
---|---|
آرایههای تو در تو به عنوان سلولهای تکی ظاهر میشوند | گزینههای ArrayAsTable و NestedArrayAsTable را فعال کنید |
روابط دادهها از دست میرود | جداول/کاربرگهای متعدد با ستونهای رابطهای ایجاد کنید |
نامهای ستون نادرست هستند | از گزینه DateTimeGroupSeparator برای سفارشیسازی نامها استفاده کنید |
مشکلات حافظه با فایلهای بزرگ | JSON را در تکهها پردازش کنید یا از رویکردهای استریمینگ استفاده کنید |