100% ローカル — データがブラウザの外に出ることはありません

JSONをXMLに変換|そのまま使える正しいXMLを書き出す

JSONをXMLに変換します。ルート要素はひとつ、タグ名は正しい形に直され、字下げも選べます。SOAP のリクエスト本文や、XMLしか受け取らない古い仕組みにそのまま貼れます。

高速 プライベート Cookieゼロ
インデント

JSON 入力

XML 出力

このツールの動作

キーが要素に、値がその中身になります。

{ "user": { "name": "Ada", "port": 8080, "active": true } }
<user>
  <name>Ada</name>
  <port>8080</port>
  <active>true</active>
</user>

根に複数のキーがある文書は <root> で包みます。XML の根要素はちょうど一つと決まっているためです。根が配列なら、その中で <item> の繰り返しになります。

ここで型は存在しなくなる

いまの出力をもう一度見てください。8080 も true も、いまやテキストです。かつて別のものだったと告げるものは、文書のどこにもありません。

これは変換の限界ではなく、XML とはそういうものだということです。XML 文書が運ぶのは構造とテキストです。型はスキーマ——XSD、DTD、RELAX NG——から来ます。それは文書の外に住んでおり、この変換に作り出す手立てはありません。

実務上の帰結ははっきり述べておきます。戻せば文字列になります。 {"port": 8080} は {"port": "8080"} として返ります。読む側が別の判断をしない限り——つまり推測しない限り——そうなります。そして推測は、1.10 のような版番号や 01234 のような郵便番号で外れます。

型を保ったまま往復させたいのなら、XML は行き先として適しません。XML が必要なら、戻りは不可逆だと織り込んでください。

キーは修復する。壊れたまま出さない

XML の要素名に空白は使えず、数字で始めることもできません。

キー要素
user name<user_name>
2nd<_2nd>

そして二つのキーが同じ名前に修復されるときは、二つ目を user_name_1 にします。一つにまとめれば値が黙って消えます。この道具がとりわけ避けようとしているのがそれです。

属性と、往復について

"@_id" と書いたキーは属性に、"#text" は要素のテキストになります。

{ "user": { "@_id": "1", "#text": "Ada" } }
<user id="1">Ada</user>

XML から JSON への方向が出すのと同じ約束なので、XML から変換した文書は同じ形に戻ります。ただし型は、上で述べたとおり文字列になっています。

プライバシー

すべての処理はブラウザ内のJavaScriptだけで完結します。データがアップロードされることはないため、機密情報でも安心して利用でき、オフラインでも動作します。

よくある質問

なぜ数値が文字列になって戻ってくるのですか。
XML に型がないからです。`{"port": 8080}` は `<port>8080</port>` になり、XML 文書にはそれが数値なのか「8080」という文字列なのかを言う手段がありません。戻せば文字列になります。スキーマか、推測する変換器が別の判断をしない限りは。情報が失われるのは XML にする段階であって、戻す段階ではありません。
要素名として妥当でないキーはどうなりますか。
修復します。`user name` は `<user_name>`、`2nd` は `<_2nd>` になります。二つのキーが同じ名前に修復されたときは、一つ目を上書きせず、二つ目に接尾辞を付けて `user_name_1` とします。何も言わずに値が消えるほうが、見栄えの悪い名前より悪いからです。
要素ではなく属性を作れますか。
作れます。`"@_id"` という名前のキーは属性 `id` に、`"#text"` は要素のテキストになります。XML から JSON への方向が出す約束と同じなので、そこを通った文書は同じ形に戻ります。

関連ツール