Cara Meratakan Array JSON untuk Konversi Excel dengan C#

Cara Meratakan Array JSON untuk Konversi Excel dengan C#

Ketika bekerja dengan API modern dan layanan web, pengembang sering kali menghadapi struktur JSON yang kompleks dengan array dan objek yang bersarang dalam-dalam. Mengonversi struktur hierarkis ini menjadi tabel Excel datar merupakan tantangan yang signifikan. Panduan ini menunjukkan cara efektif untuk mengonversi array JSON bersarang ke Excel menggunakan Aspose.Cells untuk .NET.

Tantangan: Struktur JSON Bersarang yang Kompleks

Pertimbangkan respons JSON khas ini dari API web:

{
  "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"]
        }
      ]
    }
  ]
}

Mengonversi data hierarkis ini ke tabel Excel datar menciptakan beberapa tantangan:

  • Bagaimana menangani beberapa array bersarang (departemen, karyawan, keterampilan)
  • Bagaimana mempertahankan hubungan antara item induk dan anak
  • Bagaimana membuat struktur spreadsheet yang dapat dibaca

Solusi Langkah-demi-Langkah

Langkah 1: Instal Aspose.Cells

Pertama, instal Aspose.Cells untuk .NET:

dotnet add package Aspose.Cells

Langkah 2: Atur JsonLayoutOptions

Buat JsonLayoutOptions yang dikonfigurasi dengan benar untuk menangani array:

using Aspose.Cells;
using Aspose.Cells.Utility;

// Buat JsonLayoutOptions dengan penanganan array
JsonLayoutOptions options = new JsonLayoutOptions();
options.ArrayAsTable = true;  // Penting untuk pemipilan yang benar
options.ConvertNumericOrDate = true;
options.IgnoreNull = true;

Langkah 3: Muat Data JSON Kompleks

Muat data JSON bersarang kompleks Anda:

// Contoh JSON dengan array bersarang
string jsonData = File.ReadAllText("complex_data.json");

// Inisialisasi workbook dan worksheet
Workbook workbook = new Workbook();
Worksheet worksheet = workbook.Worksheets[0];

Langkah 4: Konfigurasi Pemipilan Lanjutan

Untuk struktur bersarang yang lebih kompleks, terapkan solusi pemipilan kustom:

// Tentukan posisi sel awal
int startRow = 0;
int startColumn = 0;

// Impor data JSON dengan opsi yang telah dikonfigurasi
JsonUtility.ImportData(jsonData, worksheet.Cells, startRow, startColumn, options);

Langkah 5: Tangani Array Bersarang Multi-Level

Untuk array multi-level yang kompleks, kita memerlukan pemrosesan tambahan:

// Buat worksheet kedua untuk data karyawan yang lebih rinci
Worksheet employeeSheet = workbook.Worksheets.Add("Employees");
int empRow = 0;

// Tambahkan header untuk lembar karyawan
string[] headers = { "Department", "Employee ID", "Employee Name", "Skills" };
for (int i = 0; i < headers.Length; i++)
{
    employeeSheet.Cells[empRow, i].PutValue(headers[i]);
}
empRow++;

// Analisis JSON untuk mengekstrak dan meratakan data karyawan
// Catatan: Ini memerlukan pustaka pemrosesan JSON seperti 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: Terapkan Pemformatan Profesional

Tingkatkan keterbacaan dengan pemformatan yang tepat:

// Format kedua worksheet sebagai tabel dengan header
worksheet.ListObjects.Add(0, 0, worksheet.Cells.LastCell.Row, worksheet.Cells.LastCell.Column, true);
employeeSheet.ListObjects.Add(0, 0, empRow - 1, 3, true);

// Sesuaikan kolom untuk keterbacaan yang lebih baik
worksheet.AutoFitColumns();
employeeSheet.AutoFitColumns();

Langkah 7: Simpan Hasilnya

Ekspor workbook dengan data yang diratakan:

// Simpan sebagai file Excel
workbook.Save("flattened_data.xlsx");

Solusi Sederhana Menggunakan Aspose.Cells

Untuk banyak skenario, Aspose.Cells menyediakan pendekatan yang lebih sederhana menggunakan penanganan JSON bawaan:

// Inisialisasi workbook
Workbook workbook = new Workbook();
Worksheet sheet = workbook.Worksheets[0];

// Konfigurasi opsi impor JSON
JsonLayoutOptions options = new JsonLayoutOptions
{
    ArrayAsTable = true,
    ConvertNumericOrDate = true,
    IgnoreNull = true,
    TitleStyle = new CellsFactory().CreateStyle(),
    NestedArrayAsTable = true  // Penting untuk array bersarang
};

// Atur gaya judul untuk keterbacaan yang lebih baik
options.TitleStyle.Font.IsBold = true;

// Impor JSON
JsonUtility.ImportData(jsonData, sheet.Cells, 0, 0, options);

// Simpan hasil
workbook.Save("flattened_output.xlsx");

Wawasan Kunci dan Praktik Terbaik

  1. Gunakan ArrayAsTable = true - Ini penting untuk representasi array yang tepat
  2. Pertimbangkan untuk membuat beberapa worksheet untuk data hierarkis yang kompleks
  3. Terapkan pemformatan untuk membuat output lebih mudah dibaca
  4. Gunakan NestedArrayAsTable = true saat tersedia untuk penanganan struktur bersarang yang lebih baik
  5. Untuk struktur yang sangat kompleks, pertimbangkan untuk memproses JSON sebelum impor

Masalah Umum dan Solusi

MasalahSolusi
Array bersarang muncul sebagai sel tunggalAktifkan opsi ArrayAsTable dan NestedArrayAsTable
Hubungan data hilangBuat beberapa tabel/lembar dengan kolom hubungan
Nama kolom tidak benarGunakan opsi DateTimeGroupSeparator untuk menyesuaikan penamaan
Masalah memori dengan file besarProses JSON dalam potongan atau gunakan pendekatan streaming
 Indonesia