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

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

هنگام کار با APIهای مدرن و سرویس‌های وب، توسعه‌دهندگان اغلب با ساختارهای پیچیده مواجه می‌شوند JSON ساختارهایی با آرایه‌ها و اشیاء به‌صورت عمیق تو در تو. تبدیل این ساختارهای سلسله‌مراتبی به جداول صاف Excel چالشی قابل‌توجه است. این راهنما نشان می‌دهد چگونه به‌طور مؤثر آرایه‌های تو در تو JSON را به Excel تبدیل کنیم. Aspose.Cells for .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 صاف، چندین چالش ایجاد می‌کند:

  • چگونه آرایه‌های تو در تو متعدد (departments, employees, skills) را مدیریت کنیم
  • چگونه روابط بین آیتم‌های والد و فرزند را حفظ کنیم
  • چگونه ساختار قابل خواندن برای صفحه‌گسترده ایجاد کنیم

راه‌حل گام‌به‌گام

استایل CSS را اعمال کنید تا جذابیت بصری و قابلیت استفاده از داشبورد خود را ارتقا دهید:

نمودار مورد نظر را از مجموعه Charts انتخاب کنید:

dotnet add package Aspose.Cells

مرحله ۲: تنظیم 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;

مرحله ۳: بارگذاری داده‌های پیچیده JSON Data

داده‌های پیچیده تو در تو 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);

گام 5: پردازش آرایه‌های تو در تو چندسطحی

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

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

JsonLayoutOptions را پیکربندی کنید (مثلاً ArrayAsTable)

خوانایی را با قالب‌بندی مناسب ارتقا دهید:

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

گام 7: ذخیره نتیجه

کاربرگ را با داده‌های صاف‌شده صادر کنید:

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

بینش‌های کلیدی و بهترین شیوه‌ها

  1. استفاده کنید ArrayAsTable = true - این برای نمایش صحیح آرایه‌ها ضروری است
  2. ایجاد چندین برگه کاری را در نظر بگیرید برای داده‌های سلسله‌مراتبی پیچیده
  3. قالب‌بندی را اعمال کنید تا خروجی خواناتر شود
  4. استفاده کنید NestedArrayAsTable = true زمانی که برای بهبود مدیریت ساختارهای تو در تو در دسترس باشد
  5. برای ساختارهای بسیار پیچیده, پیش‌پردازش JSON را قبل از وارد کردن در نظر بگیرید

بازخورد اعتبارسنجی - لطفاً موارد زیر را برطرف کنید: خطاها (باید اصلاح شوند): 1. تشخیص زبان ترکیبی: فقط ۶۶٫۷٪ جملات به فارسی هستند. مثال: Sent 2: ‘Visual Studio 2019 یا نسخه‌های بعدی 2. .NET 6.0+ (or .NET Framework 4.0+, .NET C…’ (en, conf=1.00) متن منبع: Common Issues and Solutions

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