วิธีการแปลงอาร์เรย์ JSON ให้เป็นแบบแบนเพื่อนำไปใช้ใน Excel ด้วย C#
เมื่อทำงานกับ API สมัยใหม่และบริการเว็บ นักพัฒนามักจะพบกับโครงสร้าง 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 และ worksheet
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 ที่สองสำหรับข้อมูลพนักงานที่ละเอียด
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 เป็นตารางพร้อมหัวข้อ
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 ที่มีข้อมูลที่แปลงแล้ว:
// บันทึกเป็นไฟล์ Excel
workbook.Save("flattened_data.xlsx");
วิธีแก้ปัญหาที่ง่ายขึ้นโดยใช้ Aspose.Cells
ในหลายสถานการณ์ Aspose.Cells ให้วิธีการที่ง่ายกว่าด้วยการจัดการ JSON ในตัว:
// เริ่มต้น workbook
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
- สิ่งนี้มีความสำคัญสำหรับการแสดงผลที่ถูกต้องของอาเรย์ - พิจารณาสร้างหลาย worksheet สำหรับข้อมูลลำดับชั้นที่ซับซ้อน
- ใช้การจัดรูปแบบ เพื่อทำให้ผลลัพธ์อ่านง่ายยิ่งขึ้น
- ใช้
NestedArrayAsTable = true
เมื่อมีให้เพื่อการจัดการโครงสร้างที่ซ้อนกันได้ดียิ่งขึ้น - สำหรับโครงสร้างที่ซับซ้อนมาก ๆ ให้พิจารณาการประมวลผล JSON ก่อนการนำเข้า
ปัญหาทั่วไปและวิธีแก้ไข
ปัญหา | วิธีแก้ไข |
---|---|
อาเรย์ที่ซ้อนกันปรากฏเป็นเซลล์เดียว | เปิดใช้งานตัวเลือก ArrayAsTable และ NestedArrayAsTable |
ความสัมพันธ์ของข้อมูลสูญหาย | สร้างตาราง/แผ่นงานหลายตารางพร้อมคอลัมน์ความสัมพันธ์ |
ชื่อคอลัมน์ไม่ถูกต้อง | ใช้ตัวเลือก DateTimeGroupSeparator เพื่อปรับแต่งชื่อ |
ปัญหาหน่วยความจำกับไฟล์ขนาดใหญ่ | ประมวลผล JSON เป็นชิ้นส่วนหรือใช้วิธีการสตรีม |