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

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

เมื่อทํางานกับ APIs และบริการเว็บที่ทันสมัยนักพัฒนามักจะพบกับโครงสร้าง JSON ที่ซับซ้อนที่มีแร่และวัตถุที่คล้ายคลึงกันอย่างลึก การแปลงโครงสร้างไฮดรอลิกเหล่านี้เป็นตาราง Excel แสดงความท้าทายที่สําคัญ คู่มือนี้แสดงให้เห็นว่าวิธีการแปลงแร่ JSON ที่คล้ายคลึงกันได้อย่างมีประสิทธิภาพไปยัง Excel โดยใช้ Aspose.Cells สําหรับ .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 แผ่นสร้างความท้าทายหลายอย่าง:

  • วิธีการจัดการแร่หลายแบบ (หน่วยงานพนักงานทักษะ)
  • วิธีการรักษาความสัมพันธ์ระหว่างพ่อแม่และเด็กรายการ
  • วิธีการสร้างโครงสร้างแผ่น spreadsheet ที่สามารถอ่านได้

ขั้นตอนการแก้ปัญหา

ขั้นตอน 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;

ขั้นตอนที่ 3: ดาวน์โหลดข้อมูล JSON Complex

ดาวน์โหลดข้อมูล 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: การตั้งค่า Flattening Advanced

สําหรับโครงสร้างเคลือบขั้นสูงใช้โซลูชันการเคลือบแบบกําหนดเอง:

// 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();

ขั้นตอน 7: เก็บผล

Export the workbook with flattened ข้อมูล:

// 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");

ความเข้าใจหลักและการปฏิบัติที่ดีที่สุด

  • ใช้ ArrayAsTable = จริง - นี่เป็นสิ่งสําคัญสําหรับการแสดงผลที่เหมาะสมของแร่
  • พิจารณาการสร้างแผ่นงานหลายแบบ สําหรับข้อมูลยิเรกิกที่ซับซ้อน
  • แอปพลิเคชันการจัดรูปแบบ เพื่อให้การส่งออกสามารถอ่านได้มากขึ้น
  • ใช้ NestedArrayAsTable = จริง เมื่อพร้อมใช้งานสําหรับการจัดการที่ดีกว่าของโครงสร้าง Nested
  • สําหรับโครงสร้างที่ซับซ้อนมาก โปรดพิจารณาการประมวลผล JSON ก่อนที่จะนําเข้า

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

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