كيفية تسطيح مصفوفة JSON لتحويلها إلى Excel باستخدام C#
عند العمل مع واجهات برمجة التطبيقات الحديثة وخدمات الويب، يواجه المطورون غالبًا هياكل JSON المعقدة التي تحتوي على مصفوفات وكائنات متداخلة بعمق. تحويل هذه الهياكل الهرمية إلى جداول Excel مسطحة يمثل تحديًا كبيرًا. توضح هذه الدليل كيفية تحويل مصفوفات JSON المتداخلة إلى Excel بفعالية باستخدام Aspose.Cells for .NET.
التحدي: هياكل JSON المعقدة المتداخلة
اعتبر هذا الرد النموذجي من واجهة برمجة التطبيقات الويب:
{
"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"]
}
]
}
]
}
تحويل هذه البيانات الهرمية إلى جدول Excel مسطح يخلق عدة تحديات:
- كيفية التعامل مع مصفوفات متداخلة متعددة (الأقسام، الموظفون، المهارات)
- كيفية الحفاظ على العلاقات بين العناصر الأصلية والفرعية
- كيفية إنشاء هيكل جدول بيانات قابل للقراءة
الحل خطوة بخطوة
الخطوة 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: حفظ النتيجة
تصدير دفتر العمل مع البيانات المسطحة:
// حفظ كملف Excel
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 في أجزاء أو استخدم طرق البث |