JSON to XML — JSON を XML マークアップに変換
JSON データを XML マークアップ形式に変換します。ルート要素・属性と子要素のヒューリスティック・整形出力を設定可能。ブラウザ内で完結し、アップロードは不要です。
XML と JSON は、過去 20 年のデータシリアライゼーションにおける二大潮流です。JSON は Web を制しました。ブラウザのネイティブ形式であり、REST API のデフォルトであり、すべてのモダンフレームワークの入力です。XML はエンタープライズを制しました。SOAP の形式であり、レガシーシステムの設定ファイル形式であり、規制産業におけるドキュメント保存の形式であり、形式的なスキーマを法的要件とするデータ交換フォーマットの形式でもあります。両者の変換は二つの時代を橋渡しする行為であり、その変換にはデータというよりも規約に関する判断が常に伴います。
最も重要な二つの規約は、XML 属性のための @ プレフィックスと、JSON 配列を繰り返し要素として扱う方法です。@attr 規約は事実上の標準です。仕様の一部ではありませんが、広く普及しているため、すべての JSON-to-XML コンバーターがサポートしています。JSON オブジェクト内の @type のようなキーは、親 XML 要素の type="..." になります。配列は同じタグ名を持つ繰り返し兄弟要素に変換されますが、これが唯一の自然な対応です。JSON の順序付き値リストには、XML の順序なし要素モデル上で、繰り返される親要素以外に直接の対応物がありません。両方の規約は出力オプションで設定可能です。
XML を生成した後によく行われる次のステップは、XML Schema(XSD)で検証し、想定される構造に適合していることを確認することです。当サイトの json-to-xsd ツールを使えば、同じ JSON からそのスキーマを生成できます。宛先が SOAP エンドポイントや XML-RPC 呼び出しであれば、生成された XML がペイロード本体になります。宛先がドキュメントストアやアーカイブであれば、整形出力された XML は人間が読みやすく、差分も取りやすくなります。
使い方
JSON を貼り付ける
JSON オブジェクトをドロップするか、JSON 文字列を貼り付けます。コンバーターは構造を走査し、ルート要素名を指定して XML ドキュメントを出力します。
XML の規約を選択する
ルート要素名を設定し、整形出力のインデント(2 スペースまたは 4 スペース)を選択し、属性のヒューリスティックを切り替えます。`@` で始まる JSON キーは子要素ではなく XML 属性になります。
XML をコピーまたはダウンロードする
整形された XML をクリップボードにコピーするか、.xml ファイルとしてダウンロードします。出力は XML 1.0 の有効な XML であり、任意のブラウザや XML 対応エディタで開けます。
よくある質問
JSON キーはどのように XML 要素名に変換されますか?
JSON キーはそのまま XML 要素名になります。先頭が数字である、スペースを含む、XML 要素名として不正な文字を含むキーは、自動的にアンダースコアでプレフィックスされます。`@attr` 規約(@ で始まるキー)は、親要素の XML 属性になります。
JSON 配列はどう扱われますか?
JSON 配列は繰り返しの XML 要素になります。`items: [{name: 'a'}, {name: 'b'}]` という JSON は `<items><name>a</name></items><items><name>b</name></items>` のようになります。ラップ要素は JSON キー名を引き継ぎ、内部構造は配列の要素ごとに繰り返されます。
混合コンテンツを含む JSON オブジェクトはどのように扱われますか?
一部のキーがプリミティブで、他のキーがネストされたオブジェクトであるような JSON オブジェクトは、子要素(ネストされたオブジェクトに対応)とテキストコンテンツ(プリミティブに対応)の両方を持つ XML 要素になります。混合コンテンツは有効な XML ですが一般的ではなく、ほとんどのスキーマはテキストか子要素のどちらかを期待しており、両方は求めません。
XML namespace は生成されますか?
生成されません。出力は namespace を持たない XML です。対象のスキーマが namespace を必要とする場合は、`xmlns` 属性と namespace プレフィックスを手動で追加してください。当サイトの `json-to-xsd` ツールを使えば、同じ JSON から namespace 宣言付きの XML Schema を生成できます。
インデントやフォーマットを制御できますか?
はい。2 スペースと 4 スペースのインデントを切り替えられます。「compact」モードを有効にすれば、最小限の空白にできます(マシン間通信に適しています)。整形出力のデフォルトは 2 スペースインデントです。
制限事項
- XML 宣言は制御できない出力にはデフォルトで `<?xml version="1.0" encoding="UTF-8"?>` が含まれます。受け取り側が standalone 宣言や ISO-8859-1 宣言を想定している場合は、手動で先頭行を編集してください。
- CDATA セクションは非対応文字列値は XML のテキストコンテンツとして出力され、CDATA セクションにはなりません。JSON に CDATA でラップする必要がある HTML や XML 断片が含まれている場合は、生成後に手動で `<![CDATA[...]]>` のラッパーを追加してください。
- 属性の順序は保持されないJSON の仕様ではオブジェクトのキー順序は保証されていないため、@ プレフィックス付きのキーから派生した XML 属性は任意の順序で現れる可能性があります。特定の属性順序を要求するスキーマでは、手動でソートしてください。
プラットフォーム別の注意点
- macOS
- 生成された XML は Safari、Chrome、および任意の XML 対応エディタで開けます。SOAP や XML-RPC を必要とするレガシーシステム向けに、JSON 設定を XML に一度だけ変換するという用途には、ブラウザツールが適しています。
- Windows
- 生成された XML は Edge および任意の XML エディタで開けます。JSON API のレスポンスを XML ベースの下流システムに一度だけ変換して渡すという用途に使えます。
- Linux
- コマンドラインでの作業には、`xmlstarlet` や `yq` を用いてフォーマット間変換ができます。シェル環境が利用できない一度きりの変換には、ブラウザツールが適切な選択肢です。
- Web
- 完全にクライアントサイドで動作し、変換はミリ秒で完了します。