XML ↔ JSONについて
SOAP エンベロープ、sitemap 断片、レガシー API は XML が多く、フロントのデバッグや jq は JSON 向きです。{ または [ で始めれば XML(ルート要素付き)、< で始めればタグ名をキーにしたネスト JSON になります。
属性とテキストノードはツリーに残るため、メタデータを落とさず構造を確認できます。JSON→XML ではルートラッパーとインデント付きタグが生成され、diff や XML 必須のゲートウェイ向けの草稿に使えます。
できること
方向の自動判定
JSON はルート要素付きのインデント XML に、XML はタグ名キーのネスト JSON に変換します。先頭の非空白文字で方向が決まります。
タグ・属性・テキスト
- 要素名は JSON オブジェクトのキーに。属性と子がある場合は単一文字列に潰さずフィールド化します。
- id、xmlns、xsi:type など属性は同一ノードに残り、XPath なしで読めます。
- 同名の兄弟タグは 1 キー配下の JSON 配列にまとまります。
JSON → XML の名前
JSON キーは合法な XML タグ名になる必要があり、空白や記号は置換され、数字だけのキーには接頭辞が付くことがあります。XSD/WSDL と必ず照合してください。
適用範囲
- 高度な名前空間、CDATA 完全保持、複雑な mixed content ルールは対象外です。
- 配列か単一オブジェクトかはヒューリスティックで、XSD の choice とは一致しません。
- 巨大ペーストはメモリに載せる必要があり、多 MB 級は CLI のストリーミング向きです。
よくある使い方
SOAP / XML API
SOAP を JSON 化して DevTools や Node スクリプトで Body フィールドを抜き、環境間 diff する。各リポジトリに XML スタックを常備しなくてよい。
設定と sitemap
sitemap や Spring XML 断片を JSON で diff。ベンダー JSON を旧ゲートウェイ用 XML に戻す。
ログの XML ペイロード
メッセージキューの XML エラーを JSON にし、jq や Grafana、チケット添付で読みやすくする。
よくある質問
- 変換後の JSON/XML が期待と違うのはなぜ?
- JSON キーは XML 要素名に正規化され、特殊文字や数字のみのキーは加工されます。契約書どおりのフィールドか、必須属性が欠けていないか確認してください。
- XML → JSON で属性は残りますか?
- はい。要素の属性は子タグ・テキストと同じノードオブジェクトに載り、innerText だけにならないようにしています。
- 同じタグ名が複数ある場合は?
- 最初は単一値、兄弟が増えるとそのキー配下が JSON 配列になります。
- 巨大 XML ファイルは扱えますか?
- ブラウザがペースト全体を一度に parse します。多メガバイト級はコマンドライン向きで、本ページはメッセージ・設定・ログ抜粋向けです。
- XML を JSON にする操作は?
- < で始まる XML を貼り「変換」します。ネストはオブジェクト、重複タグ名は配列になります。ツリーが合っていればコピーし、契約と照合してください。
- XML 名前空間は往復しますか?
- xmlns や xsi 型を第一級メタデータとして完全保持するわけではありません。WSDL 重視のサービスではデバッグ用ビューと捉え、本番の正は XML のままにしてください。