Hoe Flatten JSON Array voor Excel Conversie met C#

Hoe Flatten JSON Array voor Excel Conversie met C#

Bij het werken met moderne APIs en webdiensten, ontwerpers vaak geconfronteerd met complexe JSON structuren met diep nested arrels en objecten. Converteren van deze hiërarchische structuren in vlakke Excel tabellen is een belangrijke uitdaging. Deze gids toont hoe effectief nested JSON arrels te converteren in Excel met behulp van Aspose.Cells voor .NET.

De uitdaging: complexe Nested JSON structuren

Overweeg deze typische JSON-respons van een 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"]
        }
      ]
    }
  ]
}

Het omzetten van deze hiërarchische gegevens naar een vlak Excel-tabel creëert verschillende uitdagingen:

  • Hoe om te gaan met multiple nested rays (afdelingen, medewerkers, vaardigheden)
  • Hoe relaties tussen ouders en kinderen onderhouden
  • Hoe een leesbare spreadsheet structuur te creëren

Step-by-step oplossing

Stap 1: Installeer Aspose.Cells

Installeer eerst Aspose.Cells voor .NET:

dotnet add package Aspose.Cells

Stap 2: Set Up JsonLayoutOptions

Creëren van correct geconfigureerde JsonLayoutOptions om arries te beheren:

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;

Stap 3: Laden van complexe JSON-gegevens

Laden van uw complexe nestelde JSON-gegevens:

// 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];

Stap 4: Configure Advanced Flattening

Voor geavanceerde nestende structuren, implementeren een aangepaste flitsende oplossing:

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

Stap 5: Handelen met multi-level Nested Arrays

Voor complexe multi-level rays hebben we extra verwerking nodig:

// 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++;
//     }
// }

Stap 6: Vraag professionele formatting aan

Verbeter de leesbaarheid met de juiste formatting:

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

Stap 7: Het resultaat redden

Exporteer het werkboek met verfijnde gegevens:

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

Een eenvoudige oplossing met behulp van Aspose.Cells

Voor veel scenario’s biedt Aspose.Cells een eenvoudiger benadering met behulp van de ingebouwde JSON-behandeling:

// 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 en beste praktijken

  • Use ArrayAsTable = true - Dit is essentieel voor de juiste vertegenwoordiging van array’s
  • Overweeg het creëren van meerdere worksheets voor complexe hiërarchische gegevens
  • Apply formatting om de output meer leesbaar te maken
  • Gebruik NestedArrayAsTable = waar wanneer beschikbaar is voor betere behandeling van nested structuren
  • Voor extreem complexe structuren, overweeg de JSON voorafgaand aan de invoer.

Gemeenschappelijke problemen en oplossingen

kwestieoplossingen
Nested arrays verschijnen als enkele cellenEnable ArrayAsTable and NestedArrayAsTable options
Gegevensverhoudingen verlorenCreëren van meerdere tabellen/schieten met relatiekolommen
Kolomnamen zijn onjuistUse the DateTimeGroupSeparator option to customize naming
Memorieproblemen met grote bestandenHet verwerken van de JSON in stukken of gebruik maken van streaming benaderingen
 Nederlands