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
kwestie | oplossingen |
---|---|
Nested arrays verschijnen als enkele cellen | Enable ArrayAsTable and NestedArrayAsTable options |
Gegevensverhoudingen verloren | Creëren van meerdere tabellen/schieten met relatiekolommen |
Kolomnamen zijn onjuist | Use the DateTimeGroupSeparator option to customize naming |
Memorieproblemen met grote bestanden | Het verwerken van de JSON in stukken of gebruik maken van streaming benaderingen |