چگونه آرایه JSON را برای تبدیل به اکسل با C# صاف کنیم

چگونه آرایه JSON را برای تبدیل به اکسل با C# صاف کنیم

هنگام کار با APIs مدرن و خدمات وب، توسعه دهندگان اغلب با ساختارهای پیچیده 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;

// Create JsonLayoutOptions with array handling
JsonLayoutOptions options = new JsonLayoutOptions();
options.ArrayAsTable = true;  // Crucial for proper flattening
options.ConvertNumericOrDate = true;
options.IgnoreNull = true;

مرحله 3: بارگذاری داده های پیچیده JSON

اطلاعات پیچیده JSON خود را بارگذاری کنید:

// 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];

مرحله چهارم: تنظیم فشرده سازی پیشرفته

برای ساختارهای پیشرفته نست، یک راه حل سفارشی را اجرا کنید:

// 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);

مرحله پنجم: راه حل های چندگانه

برای پیچیدگی های چند سطح، ما نیاز به پردازش اضافی داریم:

// 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++;
//     }
// }

مرحله ششم: استفاده از فرمت های حرفه ای

بهبود خواندن با فرمت مناسب:

// 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();

مرحله هفتم: نتیجه را ذخیره کنید

کارگاه را با داده های پرطرفدار وارد کنید:

// Save as Excel file
workbook.Save("flattened_data.xlsx");

یک راه حل ساده با استفاده از Aspose.Cells

برای بسیاری از سناریوهای، Aspose.Cells یک رویکرد ساده تر با استفاده از پردازش JSON ساخته شده خود را ارائه می دهد:

// 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");

مفاهیم و بهترین شیوه ها

  • استفاده از ArrayAsTable = true - این برای نمایندگی مناسب از ریشه ها ضروری است
  • در نظر گرفتن ایجاد چندین صفحه کار برای داده های پیچیده سلسله مراتبی
  • **تصمیم گیری را اعمال کنید تا خروجی قابل خواندن باشد.
  • استفاده از NestedArrayAsTable = true هنگامی که در دسترس برای مدیریت بهتر ساختارهای نستیده
  • برای ساختارهای بسیار پیچیده، قبل از واردات JSON را پیش پردازش کنید.

مسائل و راه حل‌های متداول

موضوعراه حل
قارچ ها به عنوان سلول های تک ظاهر می شوندامکان ArrayAsTable و NestedArrayAsTable گزینه ها
روابط اطلاعاتی از دست رفته استایجاد چندین جدول / شاخه با ستون های رابطه
نام ستون ها اشتباه استاستفاده از DateTimeGroupSeparator گزینه های سفارشی سازی نامگذاری
مشکلات حافظه با فایل های بزرگپردازش JSON در قطعات یا استفاده از رویکردهای پخش
 فارسی