C# ile Excel Dönüşümü için JSON Dizisini Nasıl Düzleştirirsiniz

C# ile Excel Dönüşümü için JSON Dizisini Nasıl Düzleştirirsiniz

Modern APIs ve web hizmetleri ile çalışırken, geliştiriciler sık sık karmaşık JSON yapıları ile derin yırtılmış aralar ve nesneler ile karşılaşırlar. bu hierarşik yapıları düz Excel tablolarına dönüştürmek önemli bir meydan okuma sunar. Bu kılavuz, yırtılmış JSON araları Excel’e nasıl etkili bir şekilde dönüştürüldüğünü gösterir Aspose.Cells for .NET.

The Challenge: Kompleks Nested JSON yapıları

Bir web API’den bu tipik JSON cevabını göz önünde bulundurun:

{
  "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"]
        }
      ]
    }
  ]
}

Bu ırkçı verileri düz bir Excel tablosuna dönüştürmek birkaç zorluk yaratır:

  • Çeşitli göğüsler ile nasıl başa çıkılır (bölümler, çalışanlar, beceriler)
  • Ebeveyn ve çocuğun eşyaları arasındaki ilişkiyi nasıl koruyabiliriz
  • Nasıl okunabilir bir spreadsheet yapısı oluşturmak

adım adım çözüm

Adım 1: Aspose.Cells yükleme

Öncelikle .NET için Aspose.Cells yükleme:

dotnet add package Aspose.Cells

Adım 2: JsonLayoutOptions ayarlayın

Array ile başa çıkmak için düzgün bir şekilde yapılandırılmış JsonLayoutOptions oluşturun:

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;

Adım 3: Kompleks JSON verileri yükleme

Karmaşık Nested JSON verilerinizi yükleyin:

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

Adım 4: Gelişmiş Flattening ayarlayın

Gelişmiş çamurlu yapılar için, özelleştirilmiş bir çamur çözümü uygulanır:

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

Adım 5: Çok düzeyde Nested Arrays ile uğraşmak

Karmaşık çok seviyeli aralar için, ek işleme ihtiyacımız var:

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

Adım 6: Profesyonel biçimlendirme uygulaması

Doğru biçimlendirme ile okunabilirliği arttırın:

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

Adım 7: Sonuçları Kurtar

Çalışma kitabını çamurlu verilerle ihraç edin:

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

Aspose.cells ile basitleştirilmiş bir çözüm

Birçok senaryo için Aspose.Cells, yerleşik JSON işlemini kullanarak daha basit bir yaklaşım sağlar:

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

Anahtar Bilgiler ve En İyi Uygulamalar

  • Use ArrayAsTable = true - Bu arrayların doğru temsil edilmesi için gereklidir
  • Karmaşık hiyerarşik veriler için çok sayıda çalışma sayfası oluşturmayı düşünün
  • Formatı uygulayın çıkışını daha okunabilir hale getirmek için
  • NestedArrayAsTable kullanın = gerçek daha iyi yapıların işlenmesi için mevcut olduğunda
  • Çok karmaşık yapılar için, ithalat öncesi JSON’u önceden işlemeyi düşünün.

Yaygın Sorunlar ve Çözümler

KonuÇözüm
Tırnaklar tek hücreler olarak görünüyorYetenek ArrayAsTable ve NestedArrayAsTable Seçenekler
veri ilişkileri kaybolduİlişkiler sütunları ile birden fazla tablo / tablo oluşturun
Sütun adları yanlışKullanmak için DateTimeGroupSeparator Adlandırmayı özelleştirme seçeneği
Büyük dosyalarla hafıza sorunlarıJSON’u parçalar halinde işleme veya akış yaklaşımlarını kullanın
 Türkçe