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#

Wenn Entwickler mit modernen APIs und Webdiensten arbeiten, stoßen sie häufig auf komplexe JSON-Strukturen mit tief verschachtelten Arrays und Objekten. Die Umwandlung dieser hierarchischen Strukturen in flache Excel-Tabellen stellt eine erhebliche Herausforderung dar. Dieser Leitfaden zeigt, wie man verschachtelte JSON-Arrays effektiv in Excel mit Aspose.Cells für .NET konvertiert.

Die Herausforderung: Komplexe verschachtelte JSON-Strukturen

Betrachten Sie diese typische JSON-Antwort von 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 flache Excel-Tabelle schafft mehrere Herausforderungen:

  • Wie man mit mehreren verschachtelten Arrays umgeht (Abteilungen, Mitarbeiter, Fähigkeiten)
  • Wie man Beziehungen zwischen Eltern- und Kind-Elementen aufrechterhält
  • Wie man eine lesbare Tabellenstruktur erstellt

Schritt-für-Schritt-Lösung

Schritt 1: Aspose.Cells installieren

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

dotnet add package Aspose.Cells

Schritt 2: JsonLayoutOptions einrichten

Erstellen Sie ordnungsgemäß konfigurierte JsonLayoutOptions zur Handhabung von Arrays:

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

// JsonLayoutOptions mit Array-Verarbeitung erstellen
JsonLayoutOptions options = new JsonLayoutOptions();
options.ArrayAsTable = true;  // Wichtig für das korrekte Flatten
options.ConvertNumericOrDate = true;
options.IgnoreNull = true;

Schritt 3: Komplexe JSON-Daten laden

Laden Sie Ihre komplexen verschachtelten JSON-Daten:

// Beispiel-JSON mit verschachtelten Arrays
string jsonData = File.ReadAllText("complex_data.json");

// Arbeitsmappe und Arbeitsblatt initialisieren
Workbook workbook = new Workbook();
Worksheet worksheet = workbook.Worksheets[0];

Schritt 4: Fortgeschrittenes Flattening konfigurieren

Für fortgeschrittene verschachtelte Strukturen implementieren Sie eine benutzerdefinierte Flattening-Lösung:

// Startposition der Zelle definieren
int startRow = 0;
int startColumn = 0;

// Die JSON-Daten mit unseren konfigurierten Optionen importieren
JsonUtility.ImportData(jsonData, worksheet.Cells, startRow, startColumn, options);

Schritt 5: Mehrstufige verschachtelte Arrays verarbeiten

Für komplexe mehrstufige Arrays benötigen wir zusätzliche Verarbeitung:

// Ein zweites Arbeitsblatt für detaillierte Mitarbeiterdaten erstellen
Worksheet employeeSheet = workbook.Worksheets.Add("Employees");
int empRow = 0;

// Header für das Mitarbeiterblatt hinzufügen
string[] headers = { "Department", "Employee ID", "Employee Name", "Skills" };
for (int i = 0; i < headers.Length; i++)
{
    employeeSheet.Cells[empRow, i].PutValue(headers[i]);
}
empRow++;

// JSON parsen, um Mitarbeiterdaten zu extrahieren und zu flatten
// Hinweis: Dies würde eine JSON-Parsbibliothek wie Newtonsoft.Json erfordern
// 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: Professionelle Formatierung anwenden

Verbessern Sie die Lesbarkeit mit entsprechender Formatierung:

// Beide Arbeitsblätter als Tabellen mit Headern formatieren
worksheet.ListObjects.Add(0, 0, worksheet.Cells.LastCell.Row, worksheet.Cells.LastCell.Column, true);
employeeSheet.ListObjects.Add(0, 0, empRow - 1, 3, true);

// Spalten automatisch anpassen für bessere Lesbarkeit
worksheet.AutoFitColumns();
employeeSheet.AutoFitColumns();

Schritt 7: Das Ergebnis speichern

Exportieren Sie die Arbeitsmappe mit den flatten Daten:

// Als Excel-Datei speichern
workbook.Save("flattened_data.xlsx");

Eine vereinfachte Lösung mit Aspose.Cells

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

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

// JSON-Importoptionen konfigurieren
JsonLayoutOptions options = new JsonLayoutOptions
{
    ArrayAsTable = true,
    ConvertNumericOrDate = true,
    IgnoreNull = true,
    TitleStyle = new CellsFactory().CreateStyle(),
    NestedArrayAsTable = true  // Wichtig für verschachtelte Arrays
};

// Titelstil für bessere Lesbarkeit festlegen
options.TitleStyle.Font.IsBold = true;

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

// Ergebnis speichern
workbook.Save("flattened_output.xlsx");

Wichtige Erkenntnisse und Best Practices

  1. Verwenden Sie ArrayAsTable = true - Dies ist entscheidend für die korrekte Darstellung von Arrays
  2. Erwägen Sie, mehrere Arbeitsblätter zu erstellen für komplexe hierarchische Daten
  3. Wenden Sie Formatierungen an, um die Ausgabe lesbarer zu machen
  4. Verwenden Sie NestedArrayAsTable = true, wenn verfügbar, für eine bessere Handhabung von verschachtelten Strukturen
  5. Für extrem komplexe Strukturen sollten Sie in Betracht ziehen, das JSON vor dem Import zu verarbeiten

Häufige Probleme und Lösungen

ProblemLösung
Verschachtelte Arrays erscheinen als einzelne ZellenAktivieren Sie die Optionen ArrayAsTable und NestedArrayAsTable
Datenbeziehungen gehen verlorenErstellen Sie mehrere Tabellen/Blätter mit Beziehungsspalten
Spaltennamen sind falschVerwenden Sie die Option DateTimeGroupSeparator, um die Benennung anzupassen
Speicherprobleme mit großen DateienVerarbeiten Sie das JSON in Chargen oder verwenden Sie Streaming-Ansätze
 Deutsch