Come appiattire un array JSON per la conversione in Excel con C#
Lorsque vous travaillez avec les APIs modernes et les services Web, les développeurs rencontrent souvent des structures JSON complexes avec des rayons et des objets profondément nés. Convertir ces structures hiérarchiques en tables Excel plat présente un défi important. Ce guide montre comment convertir efficacement les rayons JSON nés à Excel en utilisant Aspose.Cells pour .NET.
Le défi : les structures JSON complexes
Considérons cette réponse JSON typique à partir d’une API Web :
{
"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"]
}
]
}
]
}
Convertir ces données hiérarchiques dans un tableau Excel plat crée plusieurs défis:
- Comment gérer de multiples rayons nés (départements, employés, compétences)
- Comment entretenir les relations entre parent et enfant
- Comment créer une structure de brochure lisible
Solution étape par étape
Étape 1 : Installer Aspose.Cells
Tout d’abord, installez Aspose.Cells pour .NET :
dotnet add package Aspose.Cells
Étape 2 : Mettre en place JsonLayoutOptions
Créer des JsonLayoutOptions correctement configurées pour gérer les rayons:
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;
Étape 3 : Charger les données JSON Complex
Téléchargez vos données JSON complexes :
// 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];
Étape 4 : Configurez un Flattening avancé
Pour les structures nés avancées, mettre en œuvre une solution de flattement personnalisée:
// 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);
Étape 5: Travailler avec des arrachettes à plusieurs niveaux
Pour les rayons complexes à plusieurs niveaux, nous avons besoin de traitement supplémentaire:
// 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++;
// }
// }
Étape 6 : Appliquer le formatage professionnel
Améliorer la lecture avec le formatage approprié :
// 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();
Étape 7 : Sauver le résultat
Exporter le livre de travail avec des données flatteuses:
// Save as Excel file
workbook.Save("flattened_data.xlsx");
Une solution simplifiée en utilisant Aspose.Cells
Pour de nombreux scénarios, Aspose.Cells fournit une approche plus simple en utilisant son traitement JSON intégré :
// 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");
Principales connaissances et meilleures pratiques
- Use ArrayAsTable = vrai - Ceci est essentiel pour la bonne représentation des rayons
- Consider la création de plusieurs feuilles de travail pour les données hiérarchiques complexes
- Appliquer le formatage pour rendre la sortie plus lisible
- Use NestedArrayAsTable = vrai lorsqu’il est disponible pour un meilleur traitement des structures nestées
- Pour les structures extrêmement complexes, considérez le traitement préalable du JSON avant l’importation
Problemi Comuni e Soluzioni
Problème | La solution |
---|---|
Les rayons nés apparaissent comme des cellules uniques | permettent ArrayAsTable et NestedArrayAsTable Options |
Les relations de données sont perdues | Créer plusieurs tables / panneaux avec des colonnes de relation |
Les noms de colonnes sont incorrectes | Utilisez le DateTimeGroupSeparator Possibilité de personnaliser le nom |
Problèmes de mémoire avec de grands fichiers | Traiter le JSON en pièces ou utiliser des approches de streaming |