本文へスキップ

JSON⇄XML変換

JSON ⇄ XML

属性・配列・テキストノードの扱い方を指定して、JSONとXMLを相互に変換します。

XMLをJSONに、またその逆に変換します。この2つのあいだに正統な対応づけはありません。XMLには属性と、順序のある混合内容と、名前空間がありますが、JSONにはどれもありません。だからこのページは、約束事を隠す代わりに選んだやり方をはっきり示し、変えられるようにしています。

🔒 ブラウザの中だけで動きますjsonxmlconvert
方向

属性は `@id` のようになります。

要素自身のテキストが入る場所です。

XML

JSON

XML と JSON のあいだに決まった対応はないので、ここで選んだやり方をはっきりさせておきます。属性は @name というキーになり、要素自身のテキストは #textに入り、同じ名前の兄弟が並べば配列になります。往復で情報が落ちうるのは最後の点です。たまたま要素がひとつだけのリストは、「常に配列にする」を入れないかぎりオブジェクトひとつになって戻ってきます。

入力

215文字

出力

399文字

使い方

  1. 方向を選びます

    両側が入力を別々に持っているので、行ったり来たりしても貼り付けたものが消えません。

  2. 属性の接頭辞とテキストのキーを決めます

    `@`と`#text`が広く使われている約束事です(fast-xml-parserやxml2jsなどが使っています)。作らなければならないJSONが別のものを使っているなら、あとで加工するのではなくここで変えてください。

  3. JSONをコードが受け取るなら「常に配列にする」を有効にします

    対応づけのうち、情報が漏れる箇所です。`<item>`が1つならオブジェクト、2つなら配列になり、受け取るコードは両方を扱わなければなりません。常に配列にすれば、少し冗長になる代わりに形が安定します。

よくある質問

往復させれば元のXMLが戻ってきますか

構造としてはたいてい戻りますが、バイト単位では戻りません。コメント、処理命令、そして`<a/>`と`<a></a>`の区別は残りません。テキストと要素が交互に現れる混合内容は、順序を保ったままJSONで表す方法がありません。

`12`が文字列になるのはなぜですか

XMLに型が無いからです。文書の中のすべての値はテキストであり、そうでないと言えるのはスキーマだけです。型変換の切り替えを入れると数値と真偽値を推測しますが、あくまで推測です。商品コードの`0123`は123になり、バージョン文字列の`1.10`は1.1になります。

名前空間はどうなりますか

接頭辞は要素名の一部として残ります。`soap:Body`は`soap:Body`というキーになり、`xmlns`の宣言はふつうの属性として渡ってきます。名前空間のURIへ解決することはないので、同じ名前空間に違う接頭辞を使った2つの文書は、違うJSONになります。

SOAPのレスポンスを入れてもいいですか

構いません。このページに来るよくある理由の1つです。エンベロープも本文も中身も、入れ子のオブジェクトとして渡ってきます。SOAPの属性が行き着く先が、`@`の付いたキーです。

ここから渡せます

次の一手

このツールが出したものをそのまま受け取れる道具です。