Birden fazla DICOM dosyasını tek bir JSON array'e nasıl dönüştürürsünüz
Bu öğretici, birden fazla DICOM dosyasını C# kullanarak tek bir JSON aralığına nasıl dönüştüreceğinizi gösterir.Bu yaklaşım, analitik araçlar, veritabanları veya veri boruları için DIKOM metadata ihraç etmeye ihtiyaç duyan veri mühendisleri için ideal.
JSON Array ihracatının faydaları
Bulk veri işleme :- Birden fazla DICOM dosyası tek bir işlemde veritabanlarına ithal edilir.
Analitik hazırlıklar *:- JSON çerçeveleri doğrudan Python, Spark veya veri depolarına yüklenebilir.
- Kompakt Çıkış * :- Tüm metadata içeren tek dosya, veri yönetimini kolaylaştırır.
Etiket Arşivi: çevreyi hazırlamak
- Visual Studio veya herhangi bir uyumlu .NET IDE ayarlayın.
- Yeni bir .NET 8 konsol uygulama projesi oluşturun.
- Aspose.Medical’ı NuGet Paket Yöneticisi’nden kurun.
- Birden fazla DICOM dosyası içeren bir klasör hazırlayın.
Birden fazla DICOM dosyasını JSON Array’e dönüştürmek için adım adım rehber
Adım 1: Aspose.Medical yükleme
Projenize Aspose.Medical kütüphanesini NuGet kullanarak ekleyin.
Install-Package Aspose.Medical2. Adım: İhtiyacınız olan alanları içerir
Kodunuzda gerekli isim alanlarına referanslar ekleyin.
using Aspose.Medical.Dicom;
using Aspose.Medical.Dicom.Serialization;Adım 3: Çeşitli DICOM dosyalarını yükleme
DICOM dosyalarını bir klasörden bir koleksiyonuna yükleyin.
string inputFolder = @"C:\DicomStudies";
string[] dicomPaths = Directory.GetFiles(inputFolder, "*.dcm");
List<DicomFile> dicomFiles = new();
foreach (string path in dicomPaths)
{
dicomFiles.Add(DicomFile.Open(path));
}Adım 4: Dataset Array Ekstraktı
Yüklenen dosyaların bir dizi Dataset nesneleri oluşturun.
Dataset[] datasets = dicomFiles
.Select(dcm => dcm.Dataset)
.ToArray();Adım 5: JSON Array’a Serialize
Kullanımı DicomJsonSerializer.Serialize Dataset array ile.
string jsonArray = DicomJsonSerializer.Serialize(datasets, writeIndented: true);Adım 6: JSON Array’ı kurtarın
JSON array’i bir dosyaya kaydedin.
File.WriteAllText("dicom_studies.json", jsonArray);
Console.WriteLine($"Exported {datasets.Length} DICOM datasets to JSON array.");Tam Kodu Örneği
İşte birkaç DICOM dosyasını bir JSON aralığına nasıl dönüştüreceğinizi gösteren tam bir örnek:
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}");Örnek JSON Array çıkışı
çıkış JSON array bu şekilde görünüyor:
[
{
"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"] }
}
]LINQ ile büyük veri kümeleri işleme
Büyük veri kümeleri ile daha iyi hafıza yönetimi için, LINQ projesi kullanın:
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.");Gelişme Raporlama
Büyük maçlar için, ilerleme raporu ekleyin:
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.");JSON Array’ı Analytics Araçlarına İthalat Etmek
Python Örneği
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())MongoDB’ye Giriş
// Using mongoimport
// mongoimport --db medical --collection studies --jsonArray --file dicom_studies.json
hafıza düşünceleri
Çok büyük bir veri kümesi ile çalışırken:
- Batches işlemi: Dosyaları 100-500 dosya parçalarına bölünür.
- Stream Output: Çok büyük aralar için akım tabanlı serializasyon kullanın.
- ** Dosyaları ayarlayın**: DicomFile nesnelerinin veri seti çıkarıldıktan sonra kaldırıldığından emin olun.
// 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);
}Ek Bilgiler
- JSON array biçimi NoSQL veritabanlarına toplu ithalat için idealdir.
- Depolama verimliliği için büyük JSON dosyalarını sıkıştırmayı düşünün.
- Streaming senaryoları için, NDJSON (yeni çizgi sınırlı JSON) biçimini kullanmayı düşünün.
Sonuç
Bu öğretici size Aspose.Medical kullanarak C#‘da tek bir JSON aralığına çok sayıda DICOM dosyasını nasıl dönüştüreceğinizi göstermiştir.Bu yaklaşım analiz, veritabanı ithalatları ve veri boru hattı entegrasyonu için verimli toptan veri ihracatını sağlar.