So flatten Sie ein JSON-Array für die Excel-Konvertierung mit C#

So flatten Sie ein JSON-Array für die Excel-Konvertierung mit C#

Bei der Arbeit mit modernen APIs und Web-Diensten treffen die Entwickler häufig komplexe JSON-Strukturen mit tief vernichteten Aräen und Objekten. Die Umwandlung dieser hierarchischen Strukturen in flachen Excel-Tabels stellt eine bedeutende Herausforderung dar. Dieser Leitfaden zeigt, wie man effektiv vernichtete JSON-Aräen in Excel mit Aspose.Cells für .NET umwandelt**.

Die Herausforderung: Komplexe Nested JSON Strukturen

Betrachten Sie diese typische JSON-Reaktion aus einer 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"]
        }
      ]
    }
  ]
}

Die Umwandlung dieser hierarchischen Daten in eine flach Excel-Tabelle schafft mehrere Herausforderungen:

  • Wie man mit mehreren Nested Rails (Abteilungen, Mitarbeiter, Fähigkeiten) umgehen kann)
  • Wie man Beziehungen zwischen Eltern und Kindelemente beibehalten
  • Wie man eine lesbare Spreadsheetstruktur erstellen kann

Schritt für Schritt Lösung

Schritt 1: Installieren Sie Aspose.Cells

Zuerst installieren Sie Aspose.Cells für .NET:

dotnet add package Aspose.Cells

Schritt 2: Set Up JsonLayoutOptions

Erstellen Sie ordnungsgemäß konfigurierte JsonLayoutOptions, um Array zu handhaben:

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;

Schritt 3: Laden Sie komplexe JSON-Daten

Laden Sie Ihre komplexen Nested JSON-Daten auf:

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

Schritt 4: Konfigurieren Advanced Flattening

Für fortgeschrittene Neststrukturen implementieren Sie eine benutzerdefinierte Flattungslösung:

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

Schritt 5: Handeln Sie mit Multi-Level Nested Arrays

Für komplexe Multi-Level-Arays benötigen wir zusätzliche Verarbeitung:

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

Schritt 6: Anwenden Sie professionelle Formatierung

Verbessern Sie die Lesbarkeit mit der richtigen Formatierung:

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

Schritt 7: Das Ergebnis sparen

Exportieren Sie das Workbook mit flattentierten Daten:

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

Eine einfache Lösung mit Aspose.Cells

Für viele Szenarien bietet Aspose.Cells einen einfacheren Ansatz mit seiner integrierten JSON-Handlung:

// 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 und Best Practices

  • Use ArrayAsTable = true - Dies ist notwendig für eine ordnungsgemäße Darstellung von Array
  • Vorsichtlich der Erstellung mehrerer Arbeitsblätter für komplexe hierarchische Daten
  • Anwenden Sie Formatierung, um die Ausgabe lesbarer zu machen
  • Use NestedArrayAsTable = true, wenn für eine bessere Behandlung von Nested-Strukturen verfügbar ist
  • Für äußerst komplexe Strukturen berücksichtigen Sie die Vorverarbeitung der JSON vor dem Import

Häufige Probleme und Lösungen

ThemaLösung
Nested arrays erscheinen als einzelne ZellenEnable ArrayAsTable und NestedArrayAsTable Optionen
Datenverhältnisse verlorenErstellen von mehreren Tabellen/Tabellen mit Beziehungsstühlen
Kolumnennamen sind falschVerwenden Sie die DateTimeGroupSeparator Option zur Anpassung des Namens
Speicherprobleme mit großen DateienVerarbeiten der JSON in Teilen oder verwenden Streaming-Funktionen
 Deutsch