Jak spłaszczyć tablicę JSON do konwersji na Excel za pomocą C#

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

  1. Użyj ArrayAsTable = true - To jest niezbędne dla prawidłowej reprezentacji tablic
  2. Rozważ utworzenie wielu arkuszy dla złożonych danych hierarchicznych
  3. Zastosuj formatowanie, aby uczynić wynik bardziej czytelnym
  4. Użyj NestedArrayAsTable = true gdy jest dostępne dla lepszej obsługi struktur zagnieżdżonych
  5. Dla ekstremalnie złożonych struktur, rozważ wstępne przetwarzanie JSON przed importem

Typowe Problemy i Rozwiązania

ProblemRozwiązanie
Zagnieżdżone tablice pojawiają się jako pojedyncze komórkiWłącz opcje ArrayAsTable i NestedArrayAsTable
Relacje danych są utraconeUtwórz wiele tabel/arkuszy z kolumnami relacyjnymi
Nazwy kolumn są niepoprawneUżyj opcji DateTimeGroupSeparator, aby dostosować nazewnictwo
Problemy z pamięcią przy dużych plikachPrzetwarzaj JSON w kawałkach lub użyj podejść strumieniowych
 Polski