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 API’ler ve web servisleri ile çalışırken, geliştiriciler sıklıkla derinlemesine iç içe geçmiş diziler ve nesnelerle karmaşık JSON yapılarıyla karşılaşmaktadır. Bu hiyerarşik yapıları düz Excel tablolarına dönüştürmek önemli bir zorluk teşkil etmektedir. Bu kılavuz, iç içe geçmiş JSON dizilerini Aspose.Cells for .NET kullanarak etkili bir şekilde Excel’e nasıl dönüştüreceğinizi göstermektedir.

Zorluk: Karmaşık İç İçe JSON Yapıları

Bir web API’sinden gelen tipik bir JSON yanıtını düşünün:

{
  "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 hiyerarşik veriyi düz bir Excel tablosuna dönüştürmek birkaç zorluk yaratır:

  • Birden fazla iç içe diziyi (departmanlar, çalışanlar, beceriler) nasıl ele alacağınız
  • Ana ve alt öğeler arasındaki ilişkileri nasıl koruyacağınız
  • Okunaklı bir tablo yapısını nasıl oluşturacağınız

Adım Adım Çözüm

Adım 1: Aspose.Cells’i Yükleyin

Öncelikle, Aspose.Cells for .NET’i yükleyin:

dotnet add package Aspose.Cells

Adım 2: JsonLayoutOptions’u Ayarlayın

Dizileri ele almak için doğru şekilde yapılandırılmış JsonLayoutOptions oluşturun:

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

// Dizi işleme ile JsonLayoutOptions oluşturun
JsonLayoutOptions options = new JsonLayoutOptions();
options.ArrayAsTable = true;  // Düzleştirme için kritik
options.ConvertNumericOrDate = true;
options.IgnoreNull = true;

Adım 3: Karmaşık JSON Verilerini Yükleyin

Karmaşık iç içe geçmiş JSON verilerinizi yükleyin:

// İç içe dizilere sahip örnek JSON
string jsonData = File.ReadAllText("complex_data.json");

// Çalışma kitabını ve çalışma sayfasını başlatın
Workbook workbook = new Workbook();
Worksheet worksheet = workbook.Worksheets[0];

Adım 4: Gelişmiş Düzleştirmeyi Yapılandırın

Gelişmiş iç içe yapılar için özel bir düzleştirme çözümü uygulayın:

// Başlangıç hücresi konumunu tanımlayın
int startRow = 0;
int startColumn = 0;

// Yapılandırılmış seçeneklerimizle JSON verisini içe aktarın
JsonUtility.ImportData(jsonData, worksheet.Cells, startRow, startColumn, options);

Adım 5: Çok Düzeyli İç İçe Dizileri Ele Alın

Karmaşık çok düzeyli diziler için ek işleme gereklidir:

// Ayrıntılı çalışan verileri için ikinci bir çalışma sayfası oluşturun
Worksheet employeeSheet = workbook.Worksheets.Add("Employees");
int empRow = 0;

// Çalışan sayfası için başlıkları ekleyin
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'u ayrıştırarak çalışan verilerini çıkarın ve düzleştirin
// Not: Bu, Newtonsoft.Json gibi bir JSON ayrıştırma kütüphanesi gerektirecektir
// 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 Uygulayın

Okunabilirliği artırmak için uygun biçimlendirme yapın:

// Her iki çalışma sayfasını başlıklarla birlikte tablo olarak biçimlendirin
worksheet.ListObjects.Add(0, 0, worksheet.Cells.LastCell.Row, worksheet.Cells.LastCell.Column, true);
employeeSheet.ListObjects.Add(0, 0, empRow - 1, 3, true);

// Daha iyi okunabilirlik için sütunları otomatik boyutlandırın
worksheet.AutoFitColumns();
employeeSheet.AutoFitColumns();

Adım 7: Sonucu Kaydedin

Düzleştirilmiş verilerle çalışma kitabını dışa aktarın:

// Excel dosyası olarak kaydedin
workbook.Save("flattened_data.xlsx");

Aspose.Cells Kullanarak Basitleştirilmiş Bir Çözüm

Birçok senaryo için, Aspose.Cells yerleşik JSON işleme kullanarak daha basit bir yaklaşım sunar:

// Çalışma kitabını başlatın
Workbook workbook = new Workbook();
Worksheet sheet = workbook.Worksheets[0];

// JSON içe aktarma seçeneklerini yapılandırın
JsonLayoutOptions options = new JsonLayoutOptions
{
    ArrayAsTable = true,
    ConvertNumericOrDate = true,
    IgnoreNull = true,
    TitleStyle = new CellsFactory().CreateStyle(),
    NestedArrayAsTable = true  // İç içe diziler için önemlidir
};

// Daha iyi okunabilirlik için başlık stilini ayarlayın
options.TitleStyle.Font.IsBold = true;

// JSON'u içe aktarın
JsonUtility.ImportData(jsonData, sheet.Cells, 0, 0, options);

// Sonucu kaydedin
workbook.Save("flattened_output.xlsx");

Temel Bilgiler ve En İyi Uygulamalar

  1. ArrayAsTable = true kullanın - Dizilerin doğru temsil edilmesi için gereklidir
  2. Karmaşık hiyerarşik veriler için birden fazla çalışma sayfası oluşturmayı düşünün
  3. Çıktıyı daha okunabilir hale getirmek için biçimlendirme uygulayın
  4. İç içe yapılar için daha iyi işleme sağlamak üzere NestedArrayAsTable = true kullanın
  5. Son derece karmaşık yapılar için, içe aktarmadan önce JSON’u ön işleme tabi tutmayı düşünün

Yaygın Sorunlar ve Çözümleri

SorunÇözüm
İç içe diziler tek hücre olarak görünüyorArrayAsTable ve NestedArrayAsTable seçeneklerini etkinleştirin
Veri ilişkileri kayboluyorİlişki sütunlarına sahip birden fazla tablo/çalışma sayfası oluşturun
Sütun adları yanlışİsimlendirmeyi özelleştirmek için DateTimeGroupSeparator seçeneğini kullanın
Büyük dosyalarla bellek sorunlarıJSON’u parça parça işleyin veya akış yöntemleri kullanın
 Türkçe