Cara Meratakan Array JSON untuk Konversi Excel dengan C#
Ketika bekerja dengan APIs modern dan layanan web, pengembang sering bertemu struktur JSON yang kompleks dengan array dan objek yang sangat tertanam.Mengubah struktur hierarki ini menjadi tabel Excel rata menunjukkan tantangan yang signifikan.Panduan ini menunjukkan bagaimana untuk secara efektif mengubah array JSON tertanam ke Excel menggunakan Aspose.Cells untuk .NET.
Tantangan: Struktur kompleks Nested JSON
Pertimbangkan respons JSON tipikal ini dari web 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"]
}
]
}
]
}
Mengkonversi data hierarki ini ke tabel Excel rata menciptakan beberapa tantangan:
- Bagaimana untuk menangani array berbilang (departemen, karyawan, keterampilan)
- Bagaimana untuk mempertahankan hubungan antara orang tua dan barang-barang anak
- Bagaimana untuk membuat struktur spreadsheet yang dapat dibaca
langkah-langkah penyelesaian
Langkah 1: Menginstal Aspose.Cells
Pertama, instalasi Aspose.Cells untuk .NET:
dotnet add package Aspose.Cells
Langkah 2: Mengatur JsonLayoutOptions
Buat JsonLayoutOptions yang terkonfigurasi dengan benar untuk menangani array:
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;
Langkah 3: Mengisi Data JSON Kompleks
Mengisi data JSON yang kompleks Anda:
// 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];
Langkah 4: Mengatur Advanced Flattening
Untuk struktur nested maju, menerapkan solusi flattening tersuai:
// 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);
Langkah 5: Mengendalikan Multi-Level Nested Arrays
Untuk array multi-level yang kompleks, kami membutuhkan pemrosesan tambahan:
// 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++;
// }
// }
Langkah 6: Menggunakan Formatting Profesional
Meningkatkan pembacaan dengan pemformatan yang tepat:
// 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();
Langkah 7: Menyelamatkan hasil
Ekspor buku kerja dengan data berlapis:
// Save as Excel file
workbook.Save("flattened_data.xlsx");
Penyelesaian yang Sederhana Dengan Aspose.Cells
Untuk banyak skenario, Aspose.Cells menyediakan pendekatan yang lebih sederhana menggunakan pengendalian JSON terintegrasi:
// 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");
Key Insights dan Praktik Terbaik
- Use ArrayAsTable = true - Ini penting untuk perwakilan array yang tepat
- Pertimbangkan untuk membuat beberapa lembar kerja untuk data hierarki yang kompleks
- Menggunakan format untuk membuat output lebih mudah dibaca
- Use NestedArrayAsTable = true ketika tersedia untuk pengendalian struktur yang lebih baik
- Untuk struktur yang sangat kompleks, pertimbangkan untuk mempersiapkan JSON sebelum mengimport
Masalah Umum dan Solusi
Masalah | Solusi |
---|---|
Array Nested muncul sebagai sel tunggal | memungkinkan ArrayAsTable dan NestedArrayAsTable Pilihan |
Hubungan data hilang | Mencipta beberapa tabel/lapisan dengan kolom relasi |
Nama kolom tidak benar | Gunakan The DateTimeGroupSeparator Pilihan untuk menyesuaikan nama |
Masalah memori dengan file besar | Memproses JSON dalam potongan atau menggunakan pendekatan streaming |