כיצד ליישר מערך JSON להמרה ל-Excel עם C#

כיצד ליישר מערך JSON להמרה ל-Excel עם C#

Όταν εργάζονται με σύγχρονες APIs και web υπηρεσίες, οι προγραμματιστές συχνά συναντούν πολύπλοκες δομές JSON με βαθιά ριές και αντικείμενα. Μετατρέποντας αυτές τις ιεραρχικές δομές σε επίπεδη πίνακες Excel παρουσιάζει μια σημαντική πρόκληση. Αυτός ο οδηγός δείχνει πώς να μετατρέψετε αποτελεσματικά ριές JSON σε Excel χρησιμοποιώντας Aspose.Cells για .NET.

Η πρόκληση: σύνθετες δομές JSON Nested

Σκεφτείτε αυτή την τυπική απάντηση JSON από ένα web 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];

Βήμα 4: Προσαρμόστε την προχωρημένη επιφάνεια

Για προηγμένες δομές, εφαρμόστε μια προσαρμοσμένη λύση ψεκασμού:

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

Βήμα 6: Εφαρμόστε την επαγγελματική μορφοποίηση

Βελτιώστε την ανάγνωση με τη σωστή μορφοποίηση:

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

Βασικές γνώσεις και βέλτιστες πρακτικές

  • Use ArrayAsTable = true - Αυτό είναι απαραίτητο για την ορθή εκπροσώπηση των ραδιών
  • Σκεφτείτε τη δημιουργία πολλαπλών φύλλων εργασίας για πολύπλοκα ιεραρχικά δεδομένα
  • Εφαρμόστε τη μορφοποίηση για να κάνετε την έκδοση πιο αναγνώσιμη
  • Χρησιμοποιήστε το NestedArrayAsTable = αληθινό όταν είναι διαθέσιμο για καλύτερη διαχείριση των νεφρών δομών
  • Για εξαιρετικά πολύπλοκες δομές, εξετάστε την προ-διαχείριση του JSON πριν από την εισαγωγή

בעיות נפוצות ופתרונות

ΘέμαΛύση
Οι κατεστραμμένες ρυτίδες εμφανίζονται ως μεμονωμένα κύτταραEnable ArrayAsTable and NestedArrayAsTable options
Χάθηκαν οι σχέσεις δεδομένωνΔημιουργήστε πολλαπλές πίνακες / στήλες με στήλες σχέσεων
Τα ονόματα της στήλης είναι λάθοςUse the DateTimeGroupSeparator option to customize naming
Προβλήματα μνήμης με μεγάλα αρχείαΕπεξεργασία του JSON σε κομμάτια ή χρησιμοποιήστε προσεγγίσεις streaming
 Ελληνικά