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üyor | Yetenek 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 |