Cara Meratakan Array JSON untuk Konversi Excel dengan C#

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

MasalahSolusi
Array Nested muncul sebagai sel tunggalmemungkinkan ArrayAsTable dan NestedArrayAsTable Pilihan
Hubungan data hilangMencipta beberapa tabel/lapisan dengan kolom relasi
Nama kolom tidak benarGunakan The DateTimeGroupSeparator Pilihan untuk menyesuaikan nama
Masalah memori dengan file besarMemproses JSON dalam potongan atau menggunakan pendekatan streaming
 Indonesia