JSONからXMLへ

JSONドキュメントを貼り付けると、選択したルート要素の名称を含むXML対応データが返されます。配列については一貫した処理方法(繰り返し要素やラッパーの使用)が適用され、オプションとしてXML宣言や美しく配置されたインデントも含まれます。これは、旧システムがXMLを要求する一方で上流のデータがJSON形式で保存されている場合に特に役立ちます。

JSONをXMLに変換する方法

  1. 1

    JSONを貼り付けます

    トップレベルのオブジェクトまたは配列です。ルート要素に名前を付与します。

  2. 2

    ルートに名前を付けてください

    XMLには単一のルート要素が必要です。デフォルトは`<root>`ですが、`<users>`や`<response>`のように意味のある値を指定してください。

  3. 3

    配列の処理方法を選ぶ

    「繰り返し要素」(各配列項目が兄弟の`<item>`になる)または「ラッパー」(配列が名前付きのラッパー要素の中に入る)のいずれかを選びます。

  4. 4

    XMLをコピーします

    `<`、`>`、`&`および引用符に対して、オプションのXML宣言、適切なインデント設定、およびエンティティエスケープされた値の使用を指定します。

例:繰り返し要素

入力:

{ "users": [ { "name": "Alice" }, { "name": "Bob" } ] }

出力:

<?xml version="1.0" encoding="UTF-8"?>
<root>
  <users>
    <name>Alice</name>
  </users>
  <users>
    <name>Bob</name>
  </users>
</root>

例:配列ラッパー

「配列を<item>で包む」戦略を使用した同じ入力:

<root>
  <users>
    <item>
      <name>Alice</name>
    </item>
    <item>
      <name>Bob</name>
    </item>
  </users>
</root>

タイプマッピング

JSON XML
文字列 テキスト内容(エンティティエスケープ済み)
整数 / 小数 テキスト内容(XML型の注釈なし)
真偽値 true / false をテキストとして
null 空の要素(<foo/>)または省略
配列 繰り返し要素、またはラッパー + 項目
オブジェクト 子要素を含むネストされた要素

属性と要素の違い

XMLでは、属性(<user id="1">)と子要素(<user><id>1</id></user>)を区別します。コンバーターはデフォルトで子要素を使います。子要素は往復変換でも情報が失われません。下流のXMLで属性が必要な場合は、キーの接頭辞の規約を使ってください:

  • JSONキー@idは親要素上でXML属性id="..."として設定されます。
  • JSONキー#textが親要素のテキスト内容となります。

これらの規約は、最も一般的なJSONからXMLへの変換標準であるBadgerFishおよびParkerのマッピングに基づいています。

エスケープ規則

  • < -> &lt;
  • > -> &gt;
  • & -> &amp;
  • "&quot;(属性値において)
  • '&apos;(任意)
  • UTF-8のバイトはそのまま保持され、XMLプロログで宣言されます。

よくある間違い

  • ルートレベルのJSON配列。 XMLでは単一のルート要素が必要です。コンバーターはその配列を<root>(またはユーザーが選択した名称)で表現します。
  • 数値キー。 JSONの{"1": "a"}は有効です。XML要素名は数字で始めることができません。コンバーターは数字の前にアンダースコア(_1)を付けるか、カスタムマッピングを定義できるようにします。
  • 混合配列。 [1, "two", { "x": true }]には明確なマッピングが存在しません。これは通常、JSONデータを変換する前に正規化が必要であることを意味します。
  • 大容量のドキュメント。 XMLは記述が詳細なため、10MBのJSONデータが20~30MBのXMLデータに変換されることがあります。非常に大きなデータ量に対してはストリーミング変換を検討してください。

よくある質問

XMLでは仕様上、単一のルート要素が必須です。JSONが配列である場合や複数のトップレベルキーを含む場合は、コンバーターがすべてのデータをユーザーが指定できる名前のルート要素(デフォルト:<root>)に包み込んでいます。

はい。JSONキーには@というプレフィックスを採用してください(例:"@id": 1)。これらのキーは属性として扱われ、他のキーは子要素として保持されます。これはBadgerFishのマッピングと一致しています。

2つの戦略があります:繰り返し現れる同胞要素(各項目には親キーがタグとして設定される)または、内部に<item>要素を含むラッパーです。対象とするXMLスキーマに合致する方を選択してください。

いいえ。コンバーターはXML宣言(<?xml version="1.0"?>)を出力しますが、DTDまたはXSD参照が必要なXMLについては、変換後に手動で追加してください。

関連ツール

このツールは他の言語でも利用できます