json2dcm(1) OFFIS DCMTK json2dcm(1)

json2dcm - تبدیل سند JSON به فایل یا مجموعه‌داده DICOM

json2dcm [options] jsonfile-in dcmfile-out

ابزار json2dcm محتوای یک سند JSON (JavaScript Object Notation) را به یک فایل یا مجموعه‌داده باینری DICOM تبدیل می‌کند. انتظار می‌رود سند JSON مطابق با «مدل DICOM JSON» همان‌گونه که در DICOM Part 18 Section F تعریف شده است باشد. چنین فایل‌های JSON را می‌توان برای نمونه با استفاده از ابزار dcm2json ایجاد کرد.

jsonfile-in  نام فایل ورودی JSON برای تبدیل ("-" برای stdin)
dcmfile-out  نام فایل خروجی DICOM ("-" برای stdout)

-h   --help
       چاپ این متن راهنما و خروج
     --version
       چاپ اطلاعات نسخه و خروج
     --arguments
       چاپ آرگومان‌های بسط‌یافته خط فرمان
-q   --quiet
       حالت بی‌صدا، عدم چاپ هشدارها و خطاها
-v   --verbose
       حالت پرگو، چاپ جزئیات پردازش
-d   --debug
       حالت اشکال‌زدایی، چاپ اطلاعات اشکال‌زدایی
-ll  --log-level  [l]evel: string constant
       (fatal, error, warn, info, debug, trace)
       استفاده از سطح l برای ثبت‌کننده وقایع
-lc  --log-config  [f]ilename: string
       استفاده از فایل پیکربندی f برای ثبت‌کننده وقایع

قالب فایل ورودی:
  +f   --read-meta-info
         خواندن اطلاعات متا در صورت وجود (پیش‌فرض)
  -f   --ignore-meta-info
         نادیده گرفتن اطلاعات متای فایل

شناسه‌های یکتا:
  +Ug  --generate-new-uids
         تولید Study/Series/SOP Instance UID جدید
  -Uo  --dont-overwrite-uids
         عدم بازنویسی UIDهای موجود (پیش‌فرض)
  +Uo  --overwrite-uids
         بازنویسی UIDهای موجود
مدیریت Bulkdata URI:
  +Bu  --parse-bulkdata-uri
         تجزیه Bulkdata URIها (پیش‌فرض)
  -Bu  --ignore-bulkdata-uri
         نادیده گرفتن Bulkdata URIها
  +Bd  --add-bulkdata-dir  [d]irectory: string
         افزودن d به فهرست منابع bulk data مجاز
مدیریت آرایه‌های حاوی چندین مجموعه‌داده:
  -ar  --array-reject
         رد کردن چندین مجموعه‌داده (پیش‌فرض)
  +as  --array-select  [n]umber: integer
         انتخاب مجموعه‌داده n از آرایه
  +ar  --array-sequence
         ذخیره همه مجموعه‌داده‌ها در دنباله خصوصی

قالب فایل خروجی:
  +F   --write-file
         نوشتن در قالب فایل (پیش‌فرض)
  -F   --write-dataset
         نوشتن مجموعه‌داده بدون اطلاعات متای فایل
  +Fu  --update-meta-info
         به‌روزرسانی اطلاعات متای مشخص فایل
سینتکس انتقال خروجی:
  +t=  --write-xfer-same
         نوشتن با همان TS ورودی (پیش‌فرض)
  +te  --write-xfer-little
         نوشتن با TS از نوع explicit VR little endian
  +tb  --write-xfer-big
         نوشتن با TS از نوع explicit VR big endian
  +ti  --write-xfer-implicit
         نوشتن با TS از نوع implicit VR little endian
  +td  --write-xfer-deflated
         نوشتن با TS از نوع deflated explicit VR little endian
مدیریت خطا:
  -E   --stop-on-error
         عدم نوشتن در صورت نامعتبر بودن سند (پیش‌فرض)
  +E   --ignore-errors
         تلاش برای نوشتن حتی در صورت نامعتبر بودن سند
نمایش‌های مقدار (VR) پس از ۱۹۹۳:
  +u   --enable-new-vr
         فعال‌سازی پشتیبانی از VRهای جدید (UN/UT) (پیش‌فرض)
  -u   --disable-new-vr
         غیرفعال‌سازی پشتیبانی از VRهای جدید، تبدیل به OB
کدگذاری طول در دنباله‌ها و آیتم‌ها:
  +e   --length-explicit
         نوشتن با طول‌های صریح (پیش‌فرض)
  -e   --length-undefined
         نوشتن با طول‌های تعریف‌نشده
مدیریت مجموعه نویسه‌ها:
  +c   --charset-accept
         نوشتن با مجموعه نویسه‌های مشخص‌شده در JSON (پیش‌فرض)
  -c   --charset-replace
         جایگزینی مجموعه نویسه‌های مشخص‌شده در JSON با UTF-8
سطح فشرده‌سازی deflate (فقط با --write-xfer-deflated):
  +cl  --compression-level  [l]evel: integer (default: 6)
         0=بدون فشرده‌سازی، 1=سریع‌ترین، 9=بهترین فشرده‌سازی

ساختار پایه‌ای ورودی JSON مورد انتظار به شکل زیر است (برای جزئیات به DICOM Part 18 Section F مراجعه کنید):

{
    "00080005": {
        "vr": "CS",
        "Value": [
            "ISO_IR 192"
        ]
    },
    "00080020": {
        "vr": "DT",
        "Value": [
            "20130409"
        ]
    },
    "00080030": {
        "vr": "TM",
        "Value": [
            "131600.0000"
        ]
    },
    "00080050": {
        "vr": "SH",
        "Value": [
            "11235813"
        ]
    },
    "00080056": {
        "vr": "CS",
        "Value": [
            "ONLINE"
        ]
    },
    "00080061": {
        "vr": "CS",
        "Value": [
            "CT",
            "PET"
        ]
    },
    "00080090": {
        "vr": "PN",
        "Value": [
          {
            "Alphabetic": "^Bob^^Dr."
          }
        ]
    },
    "00081190": {
        "vr": "UR",
        "Value": [
            "http://wado.nema.org/studies/
            1.2.392.200036.9116.2.2.2.1762893313.1029997326.945873"
        ]
    },
    "00090010": {
        "vr": "LO",
        "Value": [
            "Vendor A"
        ]
    },
    "00091002": {
        "vr": "UN",
        "InlineBinary": "z0x9c8v7"
    },
    "00100010": {
        "vr": "PN",
        "Value": [
          {
            "Alphabetic": "Wang^XiaoDong"
          }
        ]
    },
    "00100020": {
        "vr": "LO",
        "Value": [
            "12345"
        ]
    },
    "00100021": {
        "vr": "LO",
        "Value": [
            "Hospital A"
        ]
    },
    "00100030": {
        "vr": "DA",
        "Value": [
            "19670701"
        ]
    },
    "00100040": {
        "vr": "CS",
        "Value": [
            "M"
        ]
    },
    "00101002": {
        "vr": "SQ",
        "Value": [
            {
                "00100020": {
                    "vr": "LO",
                    "Value": [
                        "54321"
                    ]
                },
                "00100021": {
                    "vr": "LO",
                    "Value": [
                        "Hospital B"
                    ]
                }
            },
            {
                "00100020": {
                    "vr": "LO",
                    "Value": [
                        "24680"
                    ]
                },
                "00100021": {
                    "vr": "LO",
                    "Value": [
                        "Hospital C"
                    ]
                }
            }
        ]
    },
    "0020000D": {
        "vr": "UI",
        "Value": [
            "1.2.392.200036.9116.2.2.2.1762893313.1029997326.945873"
        ]
    },
    "00200010": {
        "vr": "SH",
        "Value": [
            "11235813"
        ]
    },
    "00201206": {
        "vr": "IS",
        "Value": [
            4
        ]
    },
    "00201208": {
        "vr": "IS",
        "Value": [
            942
        ]
    }
}
قالب JSON تنها از کدگذاری UTF-8 پشتیبانی می‌کند. بنابراین فایل DICOM تولیدشده نیز شامل کدگذاری UTF-8 خواهد بود. اگر فایل JSON فاقد یک مجموعه نویسه خاص باشد، یا مجموعه‌نویسه‌ای غیر از "ISO_IR 192" داشته باشد، یک هشدار صادر خواهد شد.

مدل DICOM JSON از "InlineBinary" برای ذخیره مقادیر مشخصه بازنمایی‌های مقدار باینری مانند "OB" ،"OW" ،"OD" ،"OF" ،"OL" ،"OV" و غیره در قالب کدگذاری‌شده Base64 استفاده می‌کند. این قابلیت در json2dcm برای تمام مشخصه‌های باینری، از جمله داده‌های پیکسلی کپسوله‌نشده، پشتیبانی می‌شود.

مدل DICOM JSON همچنین امکان ذخیره مقادیر مشخصه‌ها را به‌صورت جداگانه از مجموعه‌داده JSON و ارجاع به آن‌ها از طریق یک BulkDataURI فراهم می‌کند. این قابلیت برای URIهای فایلی که به فایل‌های موجود در فایل‌سیستم محلی ارجاع می‌دهند، پشتیبانی می‌شود. ابزار json2dcm همچنین از پسوند غیررسمی طرح‌واره file URI که توسط DCM4CHE ایجاد شده پشتیبانی می‌کند؛ به طوری که پارامترهایی با نام "offset" و "length" به انتهای URI فایل اضافه می‌شوند تا به بخش خاصی از یک فایل ارجاع دهند. شناسه‌های HTTP URI و همچنین URIهایی که بخش دیگری را در یک ساختار MIME multipart/related مشخص می‌کنند، هنوز در json2dcm پشتیبانی نمی‌شوند. اگر گزینه خط فرمان --ignore-bulkdata-uri مشخص شود، تمام URIهای داده‌های حجیم نادیده گرفته شده و مشخصه‌های حاوی داده‌های حجیم با مقدار خالی نوشته خواهند شد.

در نهایت، داده‌های پیکسلی کپسوله‌شده (به‌ویژه فشرده‌شده) توسط json2dcm پشتیبانی نمی‌شوند، زیرا نحو مدل DICOM JSON برای این مورد خاص هنوز در استاندارد DICOM تعریف نشده است.

مدل DICOM JSON از ساختار آرایه JSON برای بازگرداندن چندین مجموعه‌داده در سرویس‌های DICOMweb مانند WADO-RS یا QIDO-RS استفاده می‌کند. آرایه‌های JSON حاوی یک مجموعه‌داده DICOM منفرد به‌طور خودکار توسط json2dcm شناسایی شده و همانند یک مجموعه‌داده بدون ساختار آرایه پیرامونی مدیریت می‌شوند. آرایه‌های JSON شامل چندین مجموعه‌داده به‌طور پیش‌فرض رد می‌شوند. در عوض، می‌توان از گزینه --array-select برای انتخاب یک مجموعه‌داده از آرایه جهت تبدیل استفاده کرد. گزینه --array-sequence باعث می‌شود تمام مجموعه‌داده‌ها به‌عنوان آیتم‌های توالی در یک توالی خصوصی با برچسب مشخصه (0009,1000) نوشته شوند. چنین فایل‌هایی که عمدتاً برای مقاصد اشکال‌زدایی در نظر گرفته شده‌اند، از طریق عنصر سازنده خصوصی (0009,0010) که مقدار "JSON2DCM_LIST_OF_DATASETS" را دارد، قابل شناسایی هستند.

ویرگول‌های انتهایی در JSON مجاز نیستند، اما json2dcm همچنان چنین مجموعه‌داده‌های JSON را بدون هشدار یا پیام خطا می‌پذیرد، زیرا توسط تجزیه‌کننده JSON زیرین به شکلی مناسب مدیریت می‌شوند. بنابراین کاربران نباید صرفاً به این دلیل که json2dcm یک مجموعه‌داده JSON را می‌پذیرد، آن را معتبر فرض کنند. این ابزار به‌عنوان یک اعتبارسنج برای JSON یا مدل DICOM JSON طراحی نشده است.

سطح خروجی ثبت وقایع ابزارهای مختلف خط فرمان و کتابخانه‌های زیرین می‌تواند توسط کاربر تعیین شود. به‌طور پیش‌فرض، تنها خطاها و هشدارها در جریان خطای استاندارد نوشته می‌شوند. با استفاده از گزینه --verbose پیام‌های اطلاعاتی مانند جزئیات پردازش نیز گزارش می‌شوند. گزینه --debug می‌تواند برای دریافت جزئیات بیشتر درباره فعالیت‌های داخلی، برای مثال جهت مقاصد اشکال‌زدایی استفاده شود. سایر سطوح ثبت وقایع را می‌توان با استفاده از گزینه --log-level انتخاب کرد. در حالت --quiet تنها خطاهای مهلک گزارش می‌شوند. در چنین شرایط خطای بسیار شدیدی، برنامه معمولاً خاتمه می‌یابد. برای جزئیات بیشتر درباره سطوح مختلف ثبت وقایع، به مستندات ماژول "oflog" مراجعه کنید.

در صورتی که خروجی ثبت وقایع باید در فایل نوشته شود (اختیاراً همراه با چرخش فایل وقایع)، یا به syslog (یونیکس) یا event log (ویندوز) فرستاده شود، گزینه --log-config می‌تواند استفاده شود. این فایل پیکربندی همچنین امکان هدایت تنها پیام‌های خاص به یک جریان خروجی مشخص و فیلتر کردن برخی پیام‌ها بر اساس ماژول یا برنامه‌ای که تولید شده‌اند را فراهم می‌کند. یک فایل پیکربندی نمونه در <etcdir>/logger.cfg ارائه شده است.

تمام ابزارهای خط فرمان از نمادگذاری زیر برای پارامترها استفاده می‌کنند: کروشه‌ها مقادیر اختیاری (۰-۱) را احاطه می‌کنند، سه نقطه انتهایی نشان می‌دهد که چند مقدار مجاز است (۱-n)، و ترکیبی از هر دو به معنی ۰ تا n مقدار است.

گزینه‌های خط فرمان به ترتیب با یک علامت پیشوند '+' یا '-' از پارامترها متمایز می‌شوند. معمولاً ترتیب و موقعیت گزینه‌های خط فرمان اختیاری است (یعنی می‌توانند در هر جایی ظاهر شوند). با این حال، اگر گزینه‌ها مانعة‌الجمع باشند، راست‌ترین مورد به کار گرفته می‌شود. این رفتار با قواعد ارزیابی استاندارد در شل‌های متداول یونیکس مطابقت دارد.

علاوه بر این، یک یا چند فایل دستور را می‌توان با استفاده از علامت '@' به عنوان پیشوند نام فایل مشخص کرد (مانند @command.txt). چنین آرگومان دستوری پیش از هر ارزیابی بیشتر، با محتوای فایل متنی مربوطه جایگزین می‌شود (فاصله‌های خالی متعدد به عنوان یک جداکننده منفرد در نظر گرفته می‌شوند مگر اینکه میان دو علامت نقل قول قرار گیرند). لطفاً توجه داشته باشید که یک فایل دستور نمی‌تواند شامل فایل دستور دیگری باشد. این رویکرد ساده اما مؤثر امکان خلاصه کردن ترکیب‌های متداول گزینه‌ها/پارامترها را فراهم کرده و از خط فرمان‌های طولانی و گیج‌کننده جلوگیری می‌کند (یک مثال در فایل <datadir>/dumppat.txt ارائه شده است).

ابزار dcm2json هنگام خاتمه از کدهای خروج زیر استفاده می‌کند. این امر کاربر را قادر می‌سازد دلیل خاتمه برنامه را بررسی کند.

EXITCODE_NO_ERROR                               0
EXITCODE_COMMANDLINE_SYNTAX_ERROR               1

EXITCODE_CANNOT_READ_INPUT_FILE                 20

EXITCODE_CANNOT_WRITE_OUTPUT_FILE               40

EXITCODE_INVALID_JSON_CONTENT                   65
EXITCODE_BULKDATA_URI_NOT_SUPPORTED             66

ابزار json2dcm تلاش خواهد کرد فرهنگ‌های داده DICOM مشخص‌شده در متغیر محیطی DCMDICTPATH را بارگذاری کند. به‌طور پیش‌فرض، یعنی اگر متغیر محیطی DCMDICTPATH تنظیم نشده باشد، فایل <datadir>/dicom.dic بارگذاری خواهد شد مگر اینکه فرهنگ داده درون برنامه تعبیه شده باشد (پیش‌فرض برای Windows).

رفتار پیش‌فرض ارجحیت دارد و از متغیر محیطی DCMDICTPATH تنها زمانی باید استفاده شود که فرهنگ‌های داده جایگزین مورد نیاز باشند. متغیر محیطی DCMDICTPATH قالبی مشابه متغیر PATH در شل یونیکس دارد به این صورت که علامت دو‌نقطه (":") ورودی‌ها را جدا می‌کند. در سیستم‌های Windows، از یک نقطه‌ویرگول (";") به عنوان جداکننده استفاده می‌شود. کد فرهنگ داده تلاش خواهد کرد تا هر فایل مشخص‌شده در متغیر محیطی DCMDICTPATH را بارگذاری کند. بارگذاری نشدن فرهنگ داده یک خطا محسوب می‌شود.

dcm2json(1) dump2dcm(2)

Copyright (C) 2024-2025 by OFFIS e.V., Escherweg 2, 26121 Oldenburg, Germany.

Thu Jul 9 2026 18:43:40 Version 3.7.0