Com convertir múltiples arxius DICOM en un únic arreu JSON
Aquest tutorial demostra com convertir múltiples fitxers DICOM en una sola aranya JSON utilitzant C#. Aquesta aproximació és ideal per als enginyers de dades que necessiten exportar metadades d’ADCOM per a eines d’anàlisi, bases de datos o pipelines de données.
Els beneficis de JSON Array Export
- El tractament de dades de l’empresa *:- Importar múltiples registres DICOM en bases de dades en una sola operació.
Anàlisis preparats *:- Els arrels de JSON es poden carregar directament a Python, Spark o emmagatzems de dades.
- Extensió compacta *- Un arxiu únic que conté totes les metadades simplifica la gestió de dades.
Previsió: Preparar el medi ambient
- Instal·lació de Visual Studio o qualsevol compatible .NET IDE.
- Crear un nou projecte d’aplicació .NET 8 consola.
- Instal·la Aspose.Medical des del NuGet Package Manager.
- Preparar una carpeta que conté múltiples fitxers DICOM.
Guia de pas a pas per convertir múltiples arxius DICOM a JSON Array
Pas 1: Instal·lació Aspose.Medical
Afegeix la biblioteca d’Aspose.Medical al teu projecte utilitzant NuGet.
Install-Package Aspose.MedicalPas 2: Incloure els espais de nom necessaris
Afegeix referències als espais de nom requerits en el teu codi.
using Aspose.Medical.Dicom;
using Aspose.Medical.Dicom.Serialization;Pas 3: Carregar múltiples arxius DICOM
Carregar els arxius DICOM d’una pasta a una col·lecció.
string inputFolder = @"C:\DicomStudies";
string[] dicomPaths = Directory.GetFiles(inputFolder, "*.dcm");
List<DicomFile> dicomFiles = new();
foreach (string path in dicomPaths)
{
dicomFiles.Add(DicomFile.Open(path));
}Pas 4: Extracció de Dataset Array
Construir una sèrie d’objectes de Dataset des dels arxius carregats.
Dataset[] datasets = dicomFiles
.Select(dcm => dcm.Dataset)
.ToArray();Pas 5: Serialitzar amb JSON Array
Use DicomJsonSerializer.Serialize amb el Dataset Array.
string jsonArray = DicomJsonSerializer.Serialize(datasets, writeIndented: true);Pas 6: Salvar el JSON Array
Salvar l’arreu JSON a un fitxer.
File.WriteAllText("dicom_studies.json", jsonArray);
Console.WriteLine($"Exported {datasets.Length} DICOM datasets to JSON array.");Exemple de codi complet
Aquí teniu un exemple complet que demostra com convertir múltiples arxius DICOM en un arreu JSON:
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}");Exemple de JSON Array Output
L’arrel de sortida JSON sembla així:
[
{
"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"] }
}
]Tractament de grans dades amb LINQ
Per a una millor gestió de la memòria amb grans set de dades, utilitzeu projeccions LINQ:
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.");Addició de reportatge de progrés
Per a grans batxes, afegir reportatge de progrés:
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.");Importació de JSON Array en eines d’anàlisi
Exemple de Python
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())Descarregar a MongoDB
// Using mongoimport
// mongoimport --db medical --collection studies --jsonArray --file dicom_studies.json
Consideracions de memòria
Quan treballem amb grans grups de dades:
- Procés en batxes: Divideix els arxius en setges de 100-500 arsipes.
- Stream Output: Utilitza la serialització basada en el flux per a arrels molt grans.
- Disposar arxius: Assegureu-vos que els objectes DicomFile s’eliminen després de l’extracció de set de dades.
// 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);
}Informació addicional
- El format d’arrel JSON és ideal per a les importacions massives en bases de dades de NoSQL.
- Considera compressar grans arxius JSON per a l’eficiència d’emmagatzematge.
- Per a escenaris de streaming, considereu utilitzar el format NDJSON (newline-delimited JSON) en lloc.
Conclusió
Aquest tutorial t’ha mostrat com convertir múltiples fitxers DICOM en una sola aranya JSON en C# utilitzant Aspose.Medical. Aquest enfocament permet l’exportació de dades en massa eficient per a les anàlisis, les importacions de bases de datos i la integració del pipeline.