Jak spłaszczyć tablicę JSON do konwersji na Excel za pomocą C#
Kiedy pracujesz z nowoczesnymi interfejsami API i usługami internetowymi, programiści często napotykają złożone struktury JSON z głęboko zagnieżdżonymi tablicami i obiektami. Konwersja tych hierarchicznych struktur na płaskie tabele Excel stanowi znaczące wyzwanie. Ten przewodnik demonstruje, jak skutecznie konwertować zagnieżdżone tablice JSON do Excela przy użyciu Aspose.Cells for .NET.
Wyzwanie: Złożone Zagnieżdżone Struktury JSON
Rozważ tę typową odpowiedź JSON z interfejsu API webowego:
{
"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"]
}
]
}
]
}
Konwersja tych danych hierarchicznych do płaskiej tabeli Excel stwarza kilka wyzwań:
- Jak obsługiwać wiele zagnieżdżonych tablic (działy, pracownicy, umiejętności)
- Jak utrzymać relacje między elementami nadrzędnymi a podrzędnymi
- Jak stworzyć czytelną strukturę arkusza kalkulacyjnego
Rozwiązanie Krok po Kroku
Krok 1: Zainstaluj Aspose.Cells
Najpierw zainstaluj Aspose.Cells for .NET:
dotnet add package Aspose.Cells
Krok 2: Ustaw JsonLayoutOptions
Utwórz odpowiednio skonfigurowane JsonLayoutOptions do obsługi tablic:
using Aspose.Cells;
using Aspose.Cells.Utility;
// Utwórz JsonLayoutOptions z obsługą tablic
JsonLayoutOptions options = new JsonLayoutOptions();
options.ArrayAsTable = true; // Kluczowe dla prawidłowego spłaszczenia
options.ConvertNumericOrDate = true;
options.IgnoreNull = true;
Krok 3: Załaduj Złożone Dane JSON
Załaduj swoje złożone zagnieżdżone dane JSON:
// Przykładowy JSON z zagnieżdżonymi tablicami
string jsonData = File.ReadAllText("complex_data.json");
// Inicjalizuj skoroszyt i arkusz
Workbook workbook = new Workbook();
Worksheet worksheet = workbook.Worksheets[0];
Krok 4: Skonfiguruj Zaawansowane Spłaszczanie
Dla zaawansowanych struktur zagnieżdżonych, wdroż rozwiązanie spłaszczające:
// Zdefiniuj początkową pozycję komórki
int startRow = 0;
int startColumn = 0;
// Importuj dane JSON z naszymi skonfigurowanymi opcjami
JsonUtility.ImportData(jsonData, worksheet.Cells, startRow, startColumn, options);
Krok 5: Obsłuż Zagnieżdżone Tablice Wielopoziomowe
Dla złożonych tablic wielopoziomowych potrzebujemy dodatkowego przetwarzania:
// Utwórz drugi arkusz dla szczegółowych danych pracowników
Worksheet employeeSheet = workbook.Worksheets.Add("Employees");
int empRow = 0;
// Dodaj nagłówki do arkusza pracowników
string[] headers = { "Department", "Employee ID", "Employee Name", "Skills" };
for (int i = 0; i < headers.Length; i++)
{
employeeSheet.Cells[empRow, i].PutValue(headers[i]);
}
empRow++;
// Przeanalizuj JSON, aby wydobyć i spłaszczyć dane pracowników
// Uwaga: To wymagałoby biblioteki do analizy JSON, takiej jak 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++;
// }
// }
Krok 6: Zastosuj Profesjonalne Formatowanie
Zwiększ czytelność dzięki odpowiedniemu formatowaniu:
// Sformatuj oba arkusze jako tabele z nagłówkami
worksheet.ListObjects.Add(0, 0, worksheet.Cells.LastCell.Row, worksheet.Cells.LastCell.Column, true);
employeeSheet.ListObjects.Add(0, 0, empRow - 1, 3, true);
// Automatycznie dopasuj kolumny dla lepszej czytelności
worksheet.AutoFitColumns();
employeeSheet.AutoFitColumns();
Krok 7: Zapisz Wynik
Eksportuj skoroszyt z spłaszczonymi danymi:
// Zapisz jako plik Excel
workbook.Save("flattened_data.xlsx");
Uproszczone Rozwiązanie z Użyciem Aspose.Cells
W wielu scenariuszach Aspose.Cells oferuje prostsze podejście przy użyciu wbudowanej obsługi JSON:
// Inicjalizuj skoroszyt
Workbook workbook = new Workbook();
Worksheet sheet = workbook.Worksheets[0];
// Skonfiguruj opcje importu JSON
JsonLayoutOptions options = new JsonLayoutOptions
{
ArrayAsTable = true,
ConvertNumericOrDate = true,
IgnoreNull = true,
TitleStyle = new CellsFactory().CreateStyle(),
NestedArrayAsTable = true // Ważne dla zagnieżdżonych tablic
};
// Ustaw styl tytułu dla lepszej czytelności
options.TitleStyle.Font.IsBold = true;
// Importuj JSON
JsonUtility.ImportData(jsonData, sheet.Cells, 0, 0, options);
// Zapisz wynik
workbook.Save("flattened_output.xlsx");
Kluczowe Wnioski i Najlepsze Praktyki
- Użyj
ArrayAsTable = true
- To jest niezbędne dla prawidłowej reprezentacji tablic - Rozważ utworzenie wielu arkuszy dla złożonych danych hierarchicznych
- Zastosuj formatowanie, aby uczynić wynik bardziej czytelnym
- Użyj
NestedArrayAsTable = true
gdy jest dostępne dla lepszej obsługi struktur zagnieżdżonych - Dla ekstremalnie złożonych struktur, rozważ wstępne przetwarzanie JSON przed importem
Typowe Problemy i Rozwiązania
Problem | Rozwiązanie |
---|---|
Zagnieżdżone tablice pojawiają się jako pojedyncze komórki | Włącz opcje ArrayAsTable i NestedArrayAsTable |
Relacje danych są utracone | Utwórz wiele tabel/arkuszy z kolumnami relacyjnymi |
Nazwy kolumn są niepoprawne | Użyj opcji DateTimeGroupSeparator , aby dostosować nazewnictwo |
Problemy z pamięcią przy dużych plikach | Przetwarzaj JSON w kawałkach lub użyj podejść strumieniowych |