ブログ
日本語

XMLをJSONに変換 — 属性・配列・Unicodeに対応

XMLをJSONに変換。属性は@キー、繰り返し要素は配列に

ブラウザー内で処理・アップロード不要

属性は@名前、混在テキストは#textに入ります。同じ名前の兄弟要素は配列になります。値は文字列のままです。混在コンテンツの正確な順序は保持しません。DTDには対応していません。

変換結果

使い方

  1. ルート要素が1つのXML文書を貼り付けます。
  2. 属性のキーと、繰り返し要素の配列を確認します。
  3. 得られたJSONをアプリケーションや分析ツールにコピーします。

変換ルール

ルートタグはJSONの一番外側のキーとして残ります。属性には@のプレフィックスが付き、@idのようになります。同じ親の下で名前が繰り返される子要素は配列になります。属性も子要素もない要素は文字列に、空の要素は空文字列になります。CDATAと標準のXML文字参照はテキストとして読み込みます。

子要素を持つ要素の場合、直接持つテキストは#textにまとめます。子要素の周りの整形用の空白だけの部分は省きます。混在コンテンツでのテキストと入れ子要素の相対的な順序は保持しません。コメントと処理命令は省きます。名前空間プレフィックスとxmlns属性は元の名前のまま残り、名前空間に基づく構造の組み替えは行いません。

例

<r><item>日本語</item><item>中文😀</item></r> からは、rの下にitemの配列ができます。<price currency="KRW">001</price> からは、値がKRWの@currencyと、文字列001の#textができます。

検証と制限

閉じていないタグ、複数のルート、未知のエンティティはエラーになります。DTDとエンティティ宣言には対応していません。入力は100万文字・64階層までです。この対応付けはデータの確認には便利ですが、可逆なXMLシリアライズではありません。結果は常にただのテキストで、変換はすべてブラウザー内で行います。

よくある質問

数値に見える値は数値に変換されますか?

いいえ。要素のテキストと属性値は文字列のままなので、001のような値の先頭のゼロも保たれます。

混在コンテンツの順序は保たれますか?

いいえ。要素が直接持つテキストは #text にまとめられ、そのテキストと子要素の相対的な位置は保持されません。

DTDや外部エンティティを読み込めますか?

いいえ。DOCTYPEとENTITYの宣言は拒否します。外部のドキュメントを取得したり、宣言されたエンティティを展開したりはしません。

XMLはアップロードされますか?

いいえ。変換はすべてブラウザー内で完結します。

ほしいツールはありますか?