JSON XML 変換器

ブラウザ上で JSON と XML を相互変換。日本語のキー名はそのまま要素名になり、空配列・入れ子の配列・XML 属性・混在テキストは場所を示して変換を止めます。

  • ブラウザ内で処理
  • データはブラウザ外に出ません
  • 無料 · 登録不要
ルート要素と整形出力の設定で JSON 欄をすぐ変換します。JSON 欄で Ctrl+Enter(Mac は ⌘+Enter)を押しても実行できます。
整形出力の設定と実際の XML ルート名で XML 欄をすぐ変換します。XML 欄で Ctrl+Enter(Mac は ⌘+Enter)を押しても実行できます。
両方の欄、待機中の変換、ステータスをクリアします。ツール内の Ctrl+L(Mac は ⌘+L)はルート要素の入力欄も空にします。
オプション
JSON → XML の外側の要素名です。空欄なら root を使い、無効な XML 名なら変換を止めます。変更後は JSON → XML を押して適用します。
両方向のインデントを切り替えます。変更後は変換したい欄の方向ボタンを押して適用します。
JSON を貼り付けます。入力を止めて0.4秒後に XML が更新されます。キーは有効な XML 名が必要です。空配列や入れ子の配列では変換を止め、最初の問題のパスを表示します。
編集内容を含む現在の JSON 全文をコピーします。XML を編集した場合や XML の変換に失敗した場合は JSON を空にしてこのボタンを無効にします。
XML を貼り付けます。入力を止めて0.4秒後に JSON が更新されます。葉の値は文字列、同名の兄弟要素は配列になります。属性やテキストと子要素の混在があると変換を止めます。
編集内容を含む現在の XML 全文をコピーします。JSON を編集した場合や JSON の変換に失敗した場合は XML を空にしてこのボタンを無効にします。
例・詳しい説明・よくある質問 実際の出力つきの例、ほかのツールとの違い、よくある質問。

変換例

日本語のキー名

XML 1.0 の名前には漢字・ひらがな・カタカナも使えるため、キー名はそのまま要素名になります。テキスト中の < と & はエスケープされます。

{"会員": {"氏名": "山田太郎", "フリガナ": "ヤマダタロウ", "メモ": "A&B 社 <担当>"}}
<?xml version="1.0" encoding="UTF-8"?>
<root>
  <会員>
    <氏名>山田太郎</氏名>
    <フリガナ>ヤマダタロウ</フリガナ>
    <メモ>A&amp;B 社 &lt;担当&gt;</メモ>
  </会員>
</root>

配列・null・空オブジェクト

配列はキー名の要素を繰り返し、トップレベルの配列は item を使います。null と {} はどちらも空要素になります。

[{"品番": "A-1", "在庫": 12}, {"品番": "B-7", "在庫": null}]
<?xml version="1.0" encoding="UTF-8"?>
<root>
  <item>
    <品番>A-1</品番>
    <在庫>12</在庫>
  </item>
  <item>
    <品番>B-7</品番>
    <在庫></在庫>
  </item>
</root>

JSON → XML が止まる場合

XML に合わせるためにキー名を書き換えたりデータを捨てたりはせず、XML を出力しないまま、最初に変換できない位置を表示します。

  • {"郵便 番号": "100-0001"} は XMLに変換できません: $["郵便 番号"]:この名前はXML要素名に使用できません。 XML 名は空白を含められず、数字で始めることもできません。: を含む名前も、接頭辞に必要な名前空間宣言を書けないため止まります。IME で入った全角スペース(U+3000)も名前に使えない文字です。

  • {"座標": [[139.76, 35.68], [135.50, 34.69]]} は XMLに変換できません: $["座標"][0]:空配列と入れ子の配列は繰り返しXML要素で表現できません。

  • {"タグ": []} は XMLに変換できません: $["タグ"]:空配列と入れ子の配列は繰り返しXML要素で表現できません。

XML → JSON

<注文>
  <番号>20261003-01</番号>
  <明細>
    <商品>ノート</商品>
    <数量>3</数量>
  </明細>
  <明細>
    <商品>ボールペン</商品>
    <数量>10</数量>
  </明細>
</注文>

整形出力をオンにすると次のようになります。

{
  "注文": {
    "番号": "20261003-01",
    "明細": [
      {
        "商品": "ノート",
        "数量": "3"
      },
      {
        "商品": "ボールペン",
        "数量": "10"
      }
    ]
  }
}

XML → JSON が止まる場合

  • <注文><明細 行="1">…</明細></注文> は JSONに変換できません: /注文/明細[1]/@行:このJSON変換規則ではXML属性を表現できません。

  • <備考>お届けは<b>翌日</b>以降です</備考> は JSONに変換できません: /備考:このJSON変換規則ではテキストと子要素の混在を表現できません。

位置の番号は同じ名前の要素を 1 から数えたもので、明細[2] は親要素の下の 2 つ目の 明細 です。

制限

  • XML → JSON の値はすべて文字列です。XML には数値や真偽値の型がないため、<数量>3</数量> は “3” になります。空要素は "" になるので、JSON の null と {} は往復すると "" になります。
  • 子要素が 1 つか複数かで形が変わります。明細 が 1 つならオブジェクト、2 つ以上なら配列です。JSON を読むコードは両方を扱う必要があります。
  • 子要素のない要素のテキストはそのまま残ります。前後の空白や改行も含みます。無視するのは子要素の間の空白だけです。コメントと処理命令は読み飛ばします。
  • 属性・名前空間宣言・混在テキストは変換を止めます(上記参照)。@id のような属性用キーへの変換はありません。
  • XML の構文エラーはブラウザのパーサーのメッセージで、Chrome・Firefox・Safari で文言が異なります。変換せずに XML を整形・圧縮したい場合は XML フォーマッター を使ってください。

JSONとXML

JSONはREST APIとWebサービスで広く使われるデータ形式で、コンパクトで読みやすく、あらゆる言語で扱えます。 XMLはエンタープライズシステム、SOAP API、設定ファイル(Maven・Spring)、ドキュメント形式(SVG・XHTML・RSS)で今も広く使われています。 形式の違うシステムをつなぐとき、このツールで同じデータがもう一方の形式でどうなるか、どの構造が対応しないかを確認できます。

FAQ

JSON → XML の変換ルールは?

オブジェクトの各キーが同じ名前の子要素になり、値がテキストになります。配列は同名要素の繰り返しになり、null と空オブジェクトは空要素になります。キーが XML 名として使えない場合や、配列が空・入れ子の場合は XML を出力せず、最初の問題の位置(例:$["m"][0])を表示します。

XML → JSON の変換ルールは?

ブラウザ内蔵の DOMParser で XML を解析します。子要素のない要素は文字列に、子要素はオブジェクトのキーになり、同名の兄弟要素は配列にまとめます。ルート要素名がトップレベルのキーです。子要素の間の空白は無視し、コメントは読み飛ばし、CDATA はテキストとして扱います。

ルート要素とは何ですか?

XML はすべての内容を 1 つのルート要素で包む必要があります。JSON → XML ではこの名前(デフォルト: root)を使います。XML 名として正しい必要があり、"123 data" のような名前では変換が止まります。XML → JSON ではこのオプションを使わず、実際のルート要素名を使います。

XML属性は対応していますか?

対応していませんが、黙って捨てることもしません。XML → JSON は最初の属性で止まり、その位置(例:/catalog/book[1]/@id)を表示します。名前空間宣言(xmlns、xmlns:x)も属性です。変換したい場合は、先に属性を子要素に書き換えてください。JSON → XML が属性を出力することはありません。

データはサーバーに送信されますか?

いいえ。すべての変換はブラウザ内で完結します。データが外部に送信されることはありません。