כיצד ליישר מערך 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 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 בחתיכות או השתמש בגישות סטרימינג |