كيفية تسطيح مصفوفة JSON لتحويلها إلى Excel باستخدام C#
عند العمل مع APIs الحديثة وخدمات الويب ، يواجه المطورون في كثير من الأحيان الهياكل JSON المعقدة مع الأقواس والأشياء المطحونة بعمق. تحويل هذه الهياكل الهرمية إلى لوحات Excel المسطحة يقدم تحديا كبيرا. يظهر هذا الدليل كيفية تحويل الأقواس JSON المطحونة بفعالية إلى Excel باستخدام 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"]
}
]
}
]
}
تحويل هذه البيانات الهرمية إلى جدول Excel مسطح يخلق العديد من التحديات:
- كيفية التعامل مع العديد من الأقواس المكسورة (الإدارات والموظفين والمهارات)
- كيفية الحفاظ على العلاقات بين الوالدين والأطفال
- كيفية إنشاء بنية قابلة للقراءة
حل خطوة بخطوة
الخطوة 1: تثبيت Aspose.Cells
أولاً، قم بتثبيت Aspose.Cells لـ .NET:
dotnet add package Aspose.Cells
الخطوة 2: إعداد JsonLayoutOptions
إنشاء JsonLayoutOptions المعدل بشكل صحيح للتعامل مع الشرائح:
using Aspose.Cells;
using Aspose.Cells.Utility;
// Create JsonLayoutOptions with array handling
JsonLayoutOptions options = new JsonLayoutOptions();
options.ArrayAsTable = true; // Crucial for proper flattening
options.ConvertNumericOrDate = true;
options.IgnoreNull = true;
الخطوة الثالثة: تحميل بيانات JSON
تحميل بيانات JSON المعقدة:
// Sample JSON with nested arrays
string jsonData = File.ReadAllText("complex_data.json");
// Initialize workbook and worksheet
Workbook workbook = new Workbook();
Worksheet worksheet = workbook.Worksheets[0];
الخطوة 4: إعداد التخطيط المتقدم
بالنسبة للهياكل المطاطية المتقدمة ، قم بتنفيذ حل مخصص للطلاء:
// Define starting cell position
int startRow = 0;
int startColumn = 0;
// Import the JSON data with our configured options
JsonUtility.ImportData(jsonData, worksheet.Cells, startRow, startColumn, options);
الخطوة 5: التعامل مع الألواح المتعددة المستويات
بالنسبة للمناطق المتعددة المستويات المعقدة ، نحتاج إلى معالجة إضافية:
// Create a second worksheet for detailed employee data
Worksheet employeeSheet = workbook.Worksheets.Add("Employees");
int empRow = 0;
// Add headers for the employee sheet
string[] headers = { "Department", "Employee ID", "Employee Name", "Skills" };
for (int i = 0; i < headers.Length; i++)
{
employeeSheet.Cells[empRow, i].PutValue(headers[i]);
}
empRow++;
// Parse JSON to extract and flatten employee data
// Note: This would require a JSON parsing library like 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: تطبيق التصميم المهني
تحسين القدرة على القراءة مع التنسيق الصحيح:
// Format both worksheets as tables with headers
worksheet.ListObjects.Add(0, 0, worksheet.Cells.LastCell.Row, worksheet.Cells.LastCell.Column, true);
employeeSheet.ListObjects.Add(0, 0, empRow - 1, 3, true);
// Auto-fit columns for better readability
worksheet.AutoFitColumns();
employeeSheet.AutoFitColumns();
الخطوة السابعة: حفظ النتيجة
تصدير دفتر العمل مع البيانات المسطحة:
// Save as Excel file
workbook.Save("flattened_data.xlsx");
حل بسيط باستخدام Aspose.Cells
بالنسبة للعديد من السيناريوهات ، توفر Aspose.Cells نهجًا أسهل باستخدام معالجة JSON المدمجة:
// Initialize workbook
Workbook workbook = new Workbook();
Worksheet sheet = workbook.Worksheets[0];
// Configure JSON import options
JsonLayoutOptions options = new JsonLayoutOptions
{
ArrayAsTable = true,
ConvertNumericOrDate = true,
IgnoreNull = true,
TitleStyle = new CellsFactory().CreateStyle(),
NestedArrayAsTable = true // Important for nested arrays
};
// Set title style for better readability
options.TitleStyle.Font.IsBold = true;
// Import JSON
JsonUtility.ImportData(jsonData, sheet.Cells, 0, 0, options);
// Save result
workbook.Save("flattened_output.xlsx");
المفاهيم الأساسية وأفضل الممارسات
- Use ArrayAsTable = true - هذا أمر ضروري لتمثيل الأقواس بشكل صحيح
- فكر في إنشاء ورقة عمل متعددة للبيانات الهرمية المعقدة
- تطبيق تنسيق لجعل النتيجة أكثر قراءة
- استخدام اللوحة = صحيح عندما يكون متاحًا للتعامل بشكل أفضل مع الهياكل المنسوجة
- بالنسبة للهياكل المعقدة للغاية ، فكر في معالجة JSON مسبقاً قبل الاستيراد
المشاكل الشائعة والحلول
مسألة | الحل |
---|---|
تظهر الأعشاب المكسورة كخلايا واحدة | تمكين ArrayAsTable و NestedArrayAsTable الخيارات |
فقدت علاقات البيانات | إنشاء العديد من اللوحات / اللوحات مع أعمدة العلاقة |
اسم العمود غير صحيح | استخدمها DateTimeGroupSeparator خيار تخصيص الاسم |
مشاكل الذاكرة مع الملفات الكبيرة | معالجة JSON في القطع أو استخدام نهج البث |