Hur man plattar ut JSON-array för Excel-konvertering med C#

Hur man plattar ut JSON-array för Excel-konvertering med C#

När du arbetar med moderna API:er och webbservrar stöter utvecklare ofta på komplexa JSON-strukturer med djupt inbäddade arrayer och objekt. Att konvertera dessa hierarkiska strukturer till platta Excel-tabeller utgör en betydande utmaning. Denna guide visar hur man effektivt konverterar inbäddade JSON-arrayer till Excel med hjälp av Aspose.Cells för .NET.

Utmaningen: Komplexa Inbäddade JSON-strukturer

Överväg detta typiska JSON-svar från ett 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"]
        }
      ]
    }
  ]
}

Att konvertera dessa hierarkiska data till en platt Excel-tabell skapar flera utmaningar:

  • Hur man hanterar flera inbäddade arrayer (avdelningar, anställda, färdigheter)
  • Hur man upprätthåller relationer mellan föräldra- och barnobjekt
  • Hur man skapar en läsbar kalkylbladsstruktur

Steg-för-steg-lösning

Steg 1: Installera Aspose.Cells

Först, installera Aspose.Cells för .NET:

dotnet add package Aspose.Cells

Steg 2: Ställ in JsonLayoutOptions

Skapa korrekt konfigurerade JsonLayoutOptions för att hantera arrayer:

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

// Skapa JsonLayoutOptions med arrayhantering
JsonLayoutOptions options = new JsonLayoutOptions();
options.ArrayAsTable = true;  // Avgörande för korrekt plattning
options.ConvertNumericOrDate = true;
options.IgnoreNull = true;

Steg 3: Ladda Komplex JSON-data

Ladda dina komplexa inbäddade JSON-data:

// Exempel JSON med inbäddade arrayer
string jsonData = File.ReadAllText("complex_data.json");

// Initiera arbetsbok och kalkylblad
Workbook workbook = new Workbook();
Worksheet worksheet = workbook.Worksheets[0];

Steg 4: Konfigurera Avancerad Plattning

För avancerade inbäddade strukturer, implementera en anpassad plattningslösning:

// Definiera startcellposition
int startRow = 0;
int startColumn = 0;

// Importera JSON-data med våra konfigurerade alternativ
JsonUtility.ImportData(jsonData, worksheet.Cells, startRow, startColumn, options);

Steg 5: Hantera Fler-nivå Inbäddade Arrayer

För komplexa fler-nivåarrayer behöver vi ytterligare bearbetning:

// Skapa ett andra kalkylblad för detaljerad anställd data
Worksheet employeeSheet = workbook.Worksheets.Add("Employees");
int empRow = 0;

// Lägg till rubriker för anställdbladet
string[] headers = { "Department", "Employee ID", "Employee Name", "Skills" };
for (int i = 0; i < headers.Length; i++)
{
    employeeSheet.Cells[empRow, i].PutValue(headers[i]);
}
empRow++;

// Tolka JSON för att extrahera och platta ut anställd data
// Obs: Detta skulle kräva ett JSON-parsningsbibliotek som 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++;
//     }
// }

Steg 6: Tillämpa Professionell Formatering

Förbättra läsbarheten med korrekt formatering:

// Formatera båda kalkylbladen som tabeller med rubriker
worksheet.ListObjects.Add(0, 0, worksheet.Cells.LastCell.Row, worksheet.Cells.LastCell.Column, true);
employeeSheet.ListObjects.Add(0, 0, empRow - 1, 3, true);

// Auto-anpassa kolumner för bättre läsbarhet
worksheet.AutoFitColumns();
employeeSheet.AutoFitColumns();

Steg 7: Spara Resultatet

Exportera arbetsboken med plattade data:

// Spara som Excel-fil
workbook.Save("flattened_data.xlsx");

En Förenklad Lösning med Aspose.Cells

För många scenarier erbjuder Aspose.Cells en enklare metod med sin inbyggda JSON-hantering:

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

// Konfigurera JSON-importalternativ
JsonLayoutOptions options = new JsonLayoutOptions
{
    ArrayAsTable = true,
    ConvertNumericOrDate = true,
    IgnoreNull = true,
    TitleStyle = new CellsFactory().CreateStyle(),
    NestedArrayAsTable = true  // Viktigt för inbäddade arrayer
};

// Ställ in titelstil för bättre läsbarhet
options.TitleStyle.Font.IsBold = true;

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

// Spara resultat
workbook.Save("flattened_output.xlsx");

Nyckelinsikter och Bästa Praxis

  1. Använd ArrayAsTable = true - Detta är avgörande för korrekt representation av arrayer
  2. Överväg att skapa flera kalkylblad för komplexa hierarkiska data
  3. Tillämpa formatering för att göra utdata mer läsbara
  4. Använd NestedArrayAsTable = true när det är tillgängligt för bättre hantering av inbäddade strukturer
  5. För extremt komplexa strukturer, överväg att förbearbeta JSON innan import

Vanliga Problem och Lösningar

ProblemLösning
Inbäddade arrayer visas som enskilda cellerAktivera ArrayAsTable och NestedArrayAsTable alternativ
Datarelationer går förloradeSkapa flera tabeller/kalkylblad med relationskolumner
Kolumnnamn är felaktigaAnvänd DateTimeGroupSeparator alternativet för att anpassa namngivning
Minnesproblem med stora filerBearbeta JSON i bitar eller använd strömmande metoder
 Svenska