Hogyan lehet több DICOM fájlt egyetlen JSON arrayba átalakítani
Ez a kézikönyv azt mutatja, hogyan lehet több DICOM fájlt egyetlen JSON sorba átalakítani a C# használatával.Ez a megközelítés ideális az adatmérnökök számára, akiknek exportálniuk kell a DIKOM metadatait elemzési eszközök, adatbázisok vagy adatcsatornák számára.
JSON Array export előnyei
- Az adatkezelés folyamata *:- Több DICOM rekord importálása egyetlen műveletben adatbázisokba.
Az elemzők készek:- A JSON fájlokat közvetlenül a Python, a Spark vagy az adatok raktáraiba lehet feltölteni.
- Kompatibilis kimenetel*- Az összes metadata tartalmazó egyetlen fájl egyszerűsíti az adatkezelést.
Előfeltételek: a környezet előkészítése
- A Visual Studio vagy bármely kompatibilis .NET IDE beállítása.
- Hozzon létre egy új .NET 8 konzol alkalmazási projektet.
- Telepítse az Aspose.Medical-t a NuGet csomagkezelőből.
- Készítsen egy mappát, amely több DICOM fájlt tartalmaz.
Lépésről lépésre útmutató a több DICOM fájl átalakítására JSON array
1. lépés: Install Aspose.Medical
Add hozzá az Aspose.Medical könyvtárat a projekthez a NuGet használatával.
Install-Package Aspose.Medical2. lépés: Tartalmazza a szükséges névterületeket
Hozzáadjon hivatkozásokat a szükséges névterületekhez a kódjában.
using Aspose.Medical.Dicom;
using Aspose.Medical.Dicom.Serialization;3. lépés: Több DICOM fájl feltöltése
Töltse le a DICOM fájlokat egy mappából egy gyűjteménybe.
string inputFolder = @"C:\DicomStudies";
string[] dicomPaths = Directory.GetFiles(inputFolder, "*.dcm");
List<DicomFile> dicomFiles = new();
foreach (string path in dicomPaths)
{
dicomFiles.Add(DicomFile.Open(path));
}4. lépés: Dataset Array kivonat
Hozzon létre egy sor Dataset objektumokat a feltöltött fájlokból.
Dataset[] datasets = dicomFiles
.Select(dcm => dcm.Dataset)
.ToArray();5. lépés: Serializáljuk a JSON Array-t
Használat DicomJsonSerializer.Serialize A Dataset array.
string jsonArray = DicomJsonSerializer.Serialize(datasets, writeIndented: true);6. lépés: mentse meg a JSON array
Mentse a JSON array-t egy fájlra.
File.WriteAllText("dicom_studies.json", jsonArray);
Console.WriteLine($"Exported {datasets.Length} DICOM datasets to JSON array.");Teljes kódex példája
Íme egy teljes példa, amely bemutatja, hogyan lehet több DICOM fájlt egy JSON sorba konvertálni:
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}");JSON array kimenetel
A JSON array kimenete így néz ki:
[
{
"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"] }
}
]Nagy adatbázisok feldolgozása a LINQ segítségével
A memória jobb kezeléséhez nagy adatkészülékekkel LINQ projekciókat használjon:
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.");A haladás jelentése
Nagy mérkőzések esetén adjunk előrejelzést:
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.");A JSON Array importálása az Analytics eszközökbe
Python példa
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())Letöltés a MongoDB-re
// Using mongoimport
// mongoimport --db medical --collection studies --jsonArray --file dicom_studies.json
Memória megfontolások
Amikor nagyon nagy adatkészülékekkel dolgozunk:
- Megfolyamat Batches: Fájlokat 100-500 fájlt tartalmazó batchokba osztunk.
- Stream Output: Az áramalapú serializáció használata nagyon nagy sávokhoz.
- Fájlok elhelyezése: Győződjön meg róla, hogy a DicomFile objektumok eltávolításra kerülnek az adatkészletek kivonása után.
// 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);
}További információk
- A JSON array formátum ideális a NoSQL adatbázisok tömeges behozatalához.
- Fontolja meg a nagy JSON fájlok tömörítését a tárolási hatékonyság érdekében.
- Streaming forgatókönyvek, fontolja meg a NDJSON (newline-delimited JSON) formátum helyett.
következtetések
Ez a kézikönyv megmutatta, hogyan lehet több DICOM fájlt egyetlen JSON sorba átalakítani a C#-ban az Aspose.Medical használatával.Ez a megközelítés lehetővé teszi a hatékony tömeges adatek exportját az elemzéshez, az adatbázisok behozatalához és az adatok csővezeték integrációjához.