Hoe om meerdere DICOM-bestanden te converteren in een enkele JSON-array
Deze tutorial toont hoe u meerdere DICOM-bestanden om te zetten in een enkele JSON-array met behulp van C#. Deze benadering is ideaal voor data ingenieurs die nodig hebben om metadata te exporteren voor analytische hulpmiddelen, databases of data pipelines.
De voordelen van JSON Array Export
Bulk gegevensverwerking:- Importeer meerdere DICOM records in databases in één operatie.
- Analytica is klaar voor:- JSON-rays kunnen rechtstreeks worden geladen in Python, Spark of data warehouses.
Compact uitgang- Een enkele bestand met alle metadata vergemakkelijkt het beheer van gegevens.
Voorwaarden: het voorbereiden van het milieu
- Installeer Visual Studio of een compatibele .NET IDE.
- Maak een nieuw .NET 8 console-applicatieproject.
- Installeer Aspose.Medical vanaf de NuGet Package Manager.
- Maak een map met meerdere DICOM-bestanden.
Step-by-step gids voor het omzetten van meerdere DICOM-bestanden naar JSON Array
Stap 1: Installeer Aspose.Medical
Voeg de Aspose.Medische bibliotheek toe aan uw project met behulp van NuGet.
Install-Package Aspose.MedicalStap 2: Inkluderen van noodzakelijke naamruimten
Voeg verwijzingen toe aan de vereiste naamruimten in uw code.
using Aspose.Medical.Dicom;
using Aspose.Medical.Dicom.Serialization;Stap 3: Laden van meerdere DICOM-bestanden
Load DICOM-bestanden van een map naar een collectie.
string inputFolder = @"C:\DicomStudies";
string[] dicomPaths = Directory.GetFiles(inputFolder, "*.dcm");
List<DicomFile> dicomFiles = new();
foreach (string path in dicomPaths)
{
dicomFiles.Add(DicomFile.Open(path));
}Stap 4: Extract Dataset Array
Maak een reeks Dataset-objecten uit de geladen bestanden.
Dataset[] datasets = dicomFiles
.Select(dcm => dcm.Dataset)
.ToArray();Stap 5: Serialiseren naar JSON Array
Gebruik DicomJsonSerializer.Serialize met de Dataset array.
string jsonArray = DicomJsonSerializer.Serialize(datasets, writeIndented: true);Stap 6: Save the JSON Array
Bewaar de JSON array naar een bestand.
File.WriteAllText("dicom_studies.json", jsonArray);
Console.WriteLine($"Exported {datasets.Length} DICOM datasets to JSON array.");Volledige code voorbeeld
Hier is een complete voorbeeld die laat zien hoe u meerdere DICOM-bestanden kunt converteren naar een JSON-arrangement:
using Aspose.Medical.Dicom;
using Aspose.Medical.Dicom.Serialization;
string inputFolder = @"C:\DicomStudies";
string outputFile = "dicom_studies.json";
// Get all DICOM files
string[] dicomPaths = Directory.GetFiles(inputFolder, "*.dcm");
Console.WriteLine($"Found {dicomPaths.Length} DICOM files.");
// Load all files
List<DicomFile> dicomFiles = new();
foreach (string path in dicomPaths)
{
try
{
dicomFiles.Add(DicomFile.Open(path));
}
catch (Exception ex)
{
Console.WriteLine($"Skipping invalid file: {Path.GetFileName(path)}");
}
}
// Build dataset array
Dataset[] datasets = dicomFiles
.Select(dcm => dcm.Dataset)
.ToArray();
// Serialize to JSON array
string jsonArray = DicomJsonSerializer.Serialize(datasets, writeIndented: true);
// Save to file
File.WriteAllText(outputFile, jsonArray);
Console.WriteLine($"Successfully exported {datasets.Length} datasets to {outputFile}");Voorbeeld JSON Array Output
De output JSON array ziet er zo uit:
[
{
"00080005": { "vr": "CS", "Value": ["ISO_IR 100"] },
"00100010": { "vr": "PN", "Value": [{ "Alphabetic": "DOE^JOHN" }] },
"00100020": { "vr": "LO", "Value": ["12345"] }
},
{
"00080005": { "vr": "CS", "Value": ["ISO_IR 100"] },
"00100010": { "vr": "PN", "Value": [{ "Alphabetic": "SMITH^JANE" }] },
"00100020": { "vr": "LO", "Value": ["67890"] }
}
]Grote gegevensverwerking met LINQ
Voor betere geheugenbeheer met grote datasets, gebruik LINQ projecties:
using Aspose.Medical.Dicom;
using Aspose.Medical.Dicom.Serialization;
string inputFolder = @"C:\LargeDicomArchive";
string outputFile = "large_export.json";
// Process files lazily to manage memory
Dataset[] datasets = Directory.GetFiles(inputFolder, "*.dcm")
.Select(path =>
{
try
{
return DicomFile.Open(path).Dataset;
}
catch
{
return null;
}
})
.Where(ds => ds != null)
.ToArray()!;
string jsonArray = DicomJsonSerializer.Serialize(datasets, writeIndented: true);
File.WriteAllText(outputFile, jsonArray);
Console.WriteLine($"Exported {datasets.Length} datasets.");Voeg Progress Reporting toe
Voor grote wedstrijden, voeg vooruitgang verslag toe:
using Aspose.Medical.Dicom;
using Aspose.Medical.Dicom.Serialization;
string inputFolder = @"C:\DicomStudies";
string[] dicomPaths = Directory.GetFiles(inputFolder, "*.dcm");
List<Dataset> datasets = new();
int processed = 0;
int total = dicomPaths.Length;
foreach (string path in dicomPaths)
{
try
{
DicomFile dcm = DicomFile.Open(path);
datasets.Add(dcm.Dataset);
}
catch (Exception ex)
{
Console.WriteLine($"Error: {Path.GetFileName(path)} - {ex.Message}");
}
processed++;
if (processed % 100 == 0 || processed == total)
{
Console.WriteLine($"Progress: {processed}/{total} ({processed * 100 / total}%)");
}
}
string jsonArray = DicomJsonSerializer.Serialize(datasets.ToArray(), writeIndented: true);
File.WriteAllText("export.json", jsonArray);
Console.WriteLine($"Export complete: {datasets.Count} datasets.");Importeer JSON Array in Analytics Tools
Python voorbeeld
import json
import pandas as pd
# Load the exported JSON array
with open('dicom_studies.json', 'r') as f:
dicom_data = json.load(f)
# Convert to DataFrame for analysis
df = pd.json_normalize(dicom_data)
print(df.head())Download naar MongoDB
// Using mongoimport
// mongoimport --db medical --collection studies --jsonArray --file dicom_studies.json
Memorie overwegingen
Bij het werken met zeer grote datasets:
- Processen in Batches: bestanden verdeeld in batches van 100-500 files.
- Stream Output: Gebruik stream-based serialisatie voor zeer grote arrels.
- Dispose Files: Zorg ervoor dat DicomFile-objecten worden verwijderd na het extraheren van datasets.
// Batch processing example
int batchSize = 100;
string[] allFiles = Directory.GetFiles(inputFolder, "*.dcm");
int batchNumber = 0;
for (int i = 0; i < allFiles.Length; i += batchSize)
{
string[] batch = allFiles.Skip(i).Take(batchSize).ToArray();
Dataset[] datasets = batch
.Select(path => DicomFile.Open(path).Dataset)
.ToArray();
string batchJson = DicomJsonSerializer.Serialize(datasets, writeIndented: true);
File.WriteAllText($"batch_{batchNumber++}.json", batchJson);
}Aanvullende informatie
- Het JSON array-formaat is ideaal voor massale invoer naar NoSQL-databases.
- Overweeg het compresseren van grote JSON-bestanden voor opslag efficiëntie.
- Voor streaming scenario’s, overweeg dan het gebruik van het NDJSON (newline-delimited JSON) format in plaats daarvan.
Conclusie
Deze tutorial heeft u aangetoond hoe u meerdere DICOM-bestanden om te zetten in een enkele JSON-array in C# met behulp van Aspose.Medical. Deze benadering stelt u in staat om efficiënte hoeveelheid gegevens te exporteren voor analyse, database-importies en data pipeline-integratie.