วิธีการแปลงอาร์เรย์ JSON ให้เป็นแบบแบนเพื่อนำไปใช้ใน Excel ด้วย C#

วิธีการแปลงอาร์เรย์ 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");

ข้อมูลเชิงลึกและแนวทางปฏิบัติที่ดีที่สุด

  1. ใช้ ArrayAsTable = true - สิ่งนี้มีความสำคัญสำหรับการแสดงผลที่ถูกต้องของอาเรย์
  2. พิจารณาสร้างหลาย worksheet สำหรับข้อมูลลำดับชั้นที่ซับซ้อน
  3. ใช้การจัดรูปแบบ เพื่อทำให้ผลลัพธ์อ่านง่ายยิ่งขึ้น
  4. ใช้ NestedArrayAsTable = true เมื่อมีให้เพื่อการจัดการโครงสร้างที่ซ้อนกันได้ดียิ่งขึ้น
  5. สำหรับโครงสร้างที่ซับซ้อนมาก ๆ ให้พิจารณาการประมวลผล JSON ก่อนการนำเข้า

ปัญหาทั่วไปและวิธีแก้ไข

ปัญหาวิธีแก้ไข
อาเรย์ที่ซ้อนกันปรากฏเป็นเซลล์เดียวเปิดใช้งานตัวเลือก ArrayAsTable และ NestedArrayAsTable
ความสัมพันธ์ของข้อมูลสูญหายสร้างตาราง/แผ่นงานหลายตารางพร้อมคอลัมน์ความสัมพันธ์
ชื่อคอลัมน์ไม่ถูกต้องใช้ตัวเลือก DateTimeGroupSeparator เพื่อปรับแต่งชื่อ
ปัญหาหน่วยความจำกับไฟล์ขนาดใหญ่ประมวลผล JSON เป็นชิ้นส่วนหรือใช้วิธีการสตรีม
 แบบไทย