XMLをJSONに変換する方法
- XMLを貼り付けるか、
.xmlファイルをエディタにドロップ、またはURLから読み込みます。入力に合わせてJSONが表示されます。 - 属性のプレフィックスとテキストのキーを調整し、常に配列にするか、数値と真偽値を変換するか、名前空間プレフィックスを無視するかを選びます。
- JSONをコピーするか、
.jsonファイルとしてダウンロードします。
XMLがJSONに変換されるルール
| XML | JSON |
|---|---|
<name>Ada</name> | "name": "Ada" |
<price>9.90</price> | "price": 9.90(桁はそのまま保持) |
<item id="7">Pen</item> | "item": {"@id": 7, "#text": "Pen"} |
<tag>a</tag><tag>b</tag> | "tag": ["a", "b"] |
<note/> | "note": null |
<![CDATA[a < b]]> | テキスト"a < b" |
名前空間プレフィックスを無視をオンにした<soap:Body> | "Body" |
「常に配列にする」オプションが重要な理由
1回だけ出現する要素は単一の値になりますが、2回出現すると配列になります。そのため、JSONを読み込むコードは両方の形に対応しなければならず、リストの項目がたまたま1つだけのときに起きる典型的なバグの原因になります。子要素を常に配列にするにチェックを入れると、すべてが配列になります。括弧が少し増える代わりに、構造が予測しやすくなります。
コードでXMLをJSONに変換する方法
- Python:
xmltodict.parse(text)(xmltodictパッケージ) - JavaScript:
new XMLParser({ ignoreAttributes: false }).parse(text)(fast-xml-parserパッケージ) - C#:
JsonConvert.SerializeXmlNode(doc)(Newtonsoft.Json) - コマンドライン:
yq -p xml -o json file.xml
よくある質問
変換で失われる情報はありますか?
要素名、属性、テキストは保持され、数値も桁が正確に保たれます。ただし、コメント、処理命令、子要素の間にあるテキストの位置(混在コンテンツ)はJSONでは表現できません。
JSONをXMLに戻すことはできますか?
はい。姉妹サイトJSON FormatterのJSON→XML変換ツールで変換できます。同じ@と#textの規則を採用しています。
名前空間はどう扱われますか?
初期設定では、soap:Bodyのようなプレフィックス付きの名前はそのままキーとして保持され、xmlns宣言は属性として出力されます。名前空間プレフィックスを無視にチェックを入れると、宣言を除いたBodyのようなシンプルな名前になります。
値が数値ではなく文字列になるのはなぜですか?
007や1,000のような値は単純な10進数ではないため、データが失われないよう文字列のまま残ります。すべての値を文字列として保持したい場合は、数値とtrue/falseを変換のチェックを外してください。