JSONをXMLに変換
ルート要素を選べる整形式XML。属性とエスケープも正しく処理します。
JSON
XML
貼り付けたものがブラウザの外に出ることはありません。 connect-src の許可リストにより、これは約束ではなくブラウザによる保証になっています。 自分で確かめる
JSONを整形式のXMLに変換します。ルート要素を選べ、属性に対応し、エスケープも正しく行います。
2つのデータモデルは完全には対応しないため、この変換はいくつかの判断を下します。ここに一覧を示し、あなたのドキュメントに当てはまる場合は出力の注記でも報告します。
対応づけの仕組み
- オブジェクトのキーは要素になる
- "name"というキーは<name>要素になります。
- @で始まるキーは属性になる
- {"@id": "1"}は、囲んでいる要素のid="1"になります。
- #textというキーは要素のテキストになる
- 属性と内容の両方を持つ要素を作りたいときは、これを使います。
- 配列は要素を繰り返す
- XMLがリストを表現する方法です。自分で作らないかぎり、別のラッパー要素は付きません。
- nullはxsi:nilになる
- XML Schemaの慣習です。空の要素にしてしまうと、空文字列と区別がつかなくなります。
XMLの名前として妥当でないキー名
XMLの要素名は数字で始められず、空白やほとんどの記号も使えません。JSONのキーはその両方を日常的にやります。そうしたキーはアンダースコアを使って書き換え、変換はそれを黙って行うのではなく報告します。逆方向に変換しても、元の名前は戻らないからです。
XMLにあってJSONにないもの
名前空間、処理命令、JSON Schemaより10年早く登場したスキーマ言語、コメント、そして属性と子要素の区別。いずれもJSONを経由した往復では残りません。したがってJSONからXMLへの変換は、妥当ではあるものの、手で書かれたXMLより構造的に単純なXMLを生み出します。
How to do this in code
コードでの変換。
py Python
import json
from dicttoxml import dicttoxml
xml = dicttoxml(json.loads(text), custom_root='root', attr_type=False)
# attr_type=False turns off the type="str" attributes dicttoxml
# adds to every element by default. js JavaScript
import { XMLBuilder } from 'fast-xml-parser';
const builder = new XMLBuilder({
format: true,
attributeNamePrefix: '@',
ignoreAttributes: false,
});
const xml = builder.build(JSON.parse(text)); cs C#
using Newtonsoft.Json;
XNode node = JsonConvert.DeserializeXNode(json, "root");
var xml = node.ToString(); よくある質問
- xsi:nil属性が付いているのはなぜですか?
- XMLにはnullがないからです。XML Schemaの慣習では、この属性で要素をnilとして印を付けます。そうすることでnullが空文字列と区別できます。空の<field/>だけでは、どちらとも判断できません。
- JSONからXMLへ変換して、また戻せますか?
- この対応づけの範囲に収まるドキュメントなら戻せます。書き換えが必要だったキー名は戻りませんし、要素1つの配列と単一の値の区別も戻りません。どちらも要素1つになるからです。