Як спростити масив JSON для конвертації в Excel за допомогою C#

Як спростити масив JSON для конвертації в Excel за допомогою C#

Коли розробники працюють з сучасними API та веб-сервісами, вони часто стикаються зі складними структурами JSON з глибоко вкладеними масивами та об’єктами. Перетворення цих ієрархічних структур у плоскі таблиці Excel є значним викликом. Цей посібник демонструє, як ефективно перетворити вкладені масиви JSON в Excel, використовуючи Aspose.Cells для .NET.

Виклик: Складні вкладені структури JSON

Розгляньте цю типовий JSON-відповідь з веб 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"]
        }
      ]
    }
  ]
}

Перетворення цих ієрархічних даних у плоску таблицю Excel створює кілька викликів:

  • Як обробляти кілька вкладених масивів (відділи, співробітники, навички)
  • Як підтримувати відносини між батьківськими та дочірніми елементами
  • Як створити читабельну структуру таблиці

Покрокове рішення

Крок 1: Встановіть Aspose.Cells

Спочатку встановіть Aspose.Cells для .NET:

dotnet add package Aspose.Cells

Крок 2: Налаштуйте JsonLayoutOptions

Створіть правильно налаштовані JsonLayoutOptions для обробки масивів:

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

// Створіть JsonLayoutOptions з обробкою масивів
JsonLayoutOptions options = new JsonLayoutOptions();
options.ArrayAsTable = true;  // Важливо для правильного сплющення
options.ConvertNumericOrDate = true;
options.IgnoreNull = true;

Крок 3: Завантажте складні дані JSON

Завантажте свої складні вкладені дані JSON:

// Приклад JSON з вкладеними масивами
string jsonData = File.ReadAllText("complex_data.json");

// Ініціалізуйте книгу та аркуш
Workbook workbook = new Workbook();
Worksheet worksheet = workbook.Worksheets[0];

Крок 4: Налаштуйте розширене сплющення

Для розширених вкладених структур реалізуйте власне рішення для сплющення:

// Визначте початкову позицію комірки
int startRow = 0;
int startColumn = 0;

// Імпортуйте дані JSON з нашими налаштованими параметрами
JsonUtility.ImportData(jsonData, worksheet.Cells, startRow, startColumn, options);

Крок 5: Обробка багаторівневих вкладених масивів

Для складних багаторівневих масивів нам потрібно додаткове оброблення:

// Створіть другий аркуш для детальних даних співробітників
Worksheet employeeSheet = workbook.Worksheets.Add("Employees");
int empRow = 0;

// Додайте заголовки для аркуша співробітників
string[] headers = { "Department", "Employee ID", "Employee Name", "Skills" };
for (int i = 0; i < headers.Length; i++)
{
    employeeSheet.Cells[empRow, i].PutValue(headers[i]);
}
empRow++;

// Розберіть JSON, щоб витягти та сплющити дані співробітників
// Примітка: Для цього знадобиться бібліотека для парсингу JSON, така як 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++;
//     }
// }

Крок 6: Застосуйте професійне форматування

Покращте читабельність за допомогою правильного форматування:

// Форматуйте обидва аркуші як таблиці з заголовками
worksheet.ListObjects.Add(0, 0, worksheet.Cells.LastCell.Row, worksheet.Cells.LastCell.Column, true);
employeeSheet.ListObjects.Add(0, 0, empRow - 1, 3, true);

// Автофіт колонок для кращої читабельності
worksheet.AutoFitColumns();
employeeSheet.AutoFitColumns();

Крок 7: Збережіть результат

Експортуйте книгу з сплющеними даними:

// Збережіть як файл Excel
workbook.Save("flattened_data.xlsx");

Спрощене рішення за допомогою Aspose.Cells

Для багатьох сценаріїв Aspose.Cells пропонує простіший підхід, використовуючи вбудовану обробку JSON:

// Ініціалізуйте книгу
Workbook workbook = new Workbook();
Worksheet sheet = workbook.Worksheets[0];

// Налаштуйте параметри імпорту JSON
JsonLayoutOptions options = new JsonLayoutOptions
{
    ArrayAsTable = true,
    ConvertNumericOrDate = true,
    IgnoreNull = true,
    TitleStyle = new CellsFactory().CreateStyle(),
    NestedArrayAsTable = true  // Важливо для вкладених масивів
};

// Встановіть стиль заголовка для кращої читабельності
options.TitleStyle.Font.IsBold = true;

// Імпортуйте JSON
JsonUtility.ImportData(jsonData, sheet.Cells, 0, 0, options);

// Збережіть результат
workbook.Save("flattened_output.xlsx");

Основні висновки та найкращі практики

  1. Використовуйте ArrayAsTable = true - Це необхідно для правильного представлення масивів
  2. Розгляньте можливість створення кількох аркушів для складних ієрархічних даних
  3. Застосовуйте форматування для покращення читабельності виходу
  4. Використовуйте NestedArrayAsTable = true коли доступно для кращої обробки вкладених структур
  5. Для надзвичайно складних структур розгляньте можливість попередньої обробки JSON перед імпортом

Загальні проблеми та рішення

ПроблемаРішення
Вкладені масиви з’являються як одиничні коміркиУвімкніть параметри ArrayAsTable та NestedArrayAsTable
Відносини даних втраченіСтворіть кілька таблиць/аркушів з колонками відносин
Імена колонок неправильніВикористовуйте параметр DateTimeGroupSeparator для налаштування назв
Проблеми з пам’яттю при великих файлахОбробляйте JSON частинами або використовуйте потокові підходи
 Українська