XML ↔ JSON
整形処理はすべてブラウザ内で完結します。データは送信されません
⚠️ この変換は本質的に可逆ではありません。しかも失われるものは見た目より多い。 XML と JSON はデータモデルが違い、同じものの 2 通りの表記ではありません: · 属性と子要素 —— `<a b="1"/>` と `<a><b>1</b></a>` は XML では別のものです(メタデータか内容か)。JSON では `@` 接頭辞で区別し、戻せば復元できます。 · 混合内容 —— `<p>前<b>太字</b>後</p>` ではテキストと要素が交互に並びます。JSON のオブジェクトに順序の概念はないため、その構造は必然的に失われます。 · 繰り返しタグ —— 2 つなら配列、1 つなら単一値になるため、「1 つある」と「1 つしかありえない」の区別が JSON では付きません。戻すと要素 1 つの配列は単一要素になります。 · コメント・処理命令・DOCTYPE —— JSON に対応物がなく、破棄して件数を数えます。 · 名前空間 —— 接頭辞はタグ名の一部として保持しますが(`xs:element`)、名前空間の解決は行いません:接頭辞が違えば同じ名前空間でも別のキーになります。 そこでここでは約束を固定して変換し、上のような損失を項目ごとに報告します(コメントが何件、どの要素が混合内容か)—— 完全に見える JSON を黙って出すのではなく。 ⚠️ 根要素は展開しません:`<a><b>1</b></a>` は `{"a":{"b":"1"}}` になり、`{"b":"1"}` にはなりません。展開したほうが綺麗に見えますが、逆方向が成立しなくなります —— `{"b":"1"}` を XML に戻すとき、根要素の名前は何にするのでしょう?その名前は展開の時点で捨てられています。このツールは双方向なので、両方向で 1 つの約束を共有します。すべてブラウザー内で完結します。
機能
- 双方向:XML → JSON と JSON → XML。明示的に指定もできます
- ⚠️ この変換で失われたものを報告:コメント・処理命令・DOCTYPE の件数
- ⚠️ 混合内容(テキストと要素の混在)を検出し、その構造がすでに失われていることを説明
- ⚠️ この変換が本質的に可逆でない理由と、向き・不向きを末尾に明記
- 属性は `@名前`、テキストは他にキーがある場合のみ `#text` に
- 同名の子要素が複数なら配列、1 つなら単一値のまま
- CDATA はテキストに統合(JSON では区別できません)
- ⚠️ タグ名と属性名は大文字小文字を区別 —— XML はそういうもので、HTML とは違います
- ⚠️ 名前空間の接頭辞はそのまま保持し、解決はしない(理由も明記)
- ⚠️ 逆方向では不正なキー名をスキップして報告し、黙って書き換えません
- ⚠️ XML は HTML より厳格:タグは閉じる、属性値は引用符必須、未定義実体はエラー —— いずれも位置を示します
- すべてブラウザー内で完結します
使い方
- XML または JSON を貼り付けます。方向は自動判定されます(`<` で始まれば XML)
- 約束を確認したい場合は「変換の約束も表示」をオンにします
- まず結果を、次に「この変換で失われたもの」を確認します
よくある質問
- 根要素を展開しないのはなぜですか?
- 展開すると逆方向が成立しなくなるからです。展開すると `<a><b>1</b></a>` は `{"b":"1"}` になり、根要素の名前 `a` が失われます。戻すとき、その根要素は何という名前になるのでしょう?`<root>` を勝手に作るしかなく、その名前はあなたのデータにはありません。このツールは双方向なので、両方向が 1 つの約束を共有する必要があり、根要素は外側に残します。往復テストはまさにこの点を固定しています:XML を JSON にして戻したとき、意味が同じでなければなりません。
- 「混合内容」とは何で、なぜ失われるのですか?
- 1 つの要素の中でテキストと子要素が交互に現れることです:`<p>前<b>太字</b>後</p>`。これは XML として完全に合法で、順序に意味があります(「後」はその `<b>` の後に来なければなりません)。一方 JSON のオブジェクトは順序を持たないキーと値の集まりで、「1 番目と 2 番目の子要素の間にテキスト」という位置を表現できません。したがってテキストは連結され、位置情報は失われます。保つには変換しないか、順序を表現できる形式を使うしかありません。ここでは少なくとも該当する要素の件数を数え、損失の在り処が分かるようにしています。
- ` ` がエラーになるのはなぜですか?
- XML が事前定義している実体は `lt`・`gt`・`amp`・`quot`・`apos` の 5 つだけだからです。` ` は HTML のもので、XML では未定義の実体であり、それを使った文書は整形式ではありません。寛容に解釈してしまえば、問題のある文書が完全に正常に見え、しかも「動く」結果を手にした人は他のツールが読めない理由を考えません。その文字が欲しければ ` ` と書いてください。
- XML と HTML の解析はそんなに違うのですか?
- 大きく違います。HTML は寛容になるよう設計されています:閉じないタグ、引用符のない属性値、大文字小文字の混在 —— ブラウザーは最善を尽くします。XML は厳格になるよう設計されています:タグは対応が必要、属性値は引用符必須、大文字小文字は区別(`<Element>` と `<element>` は別物)、未定義実体はエラーです。したがってブラウザーの HTML パーサーで XML を読むことはできません —— あなたが知る必要のある文書の問題を、黙って直してしまうからです。
- どんなときに使い、どんなときに使うべきでないですか?
- 使うべき:サービス間のデータ移動。API が XML しか返さないがコードは JSON を扱いたい、あるいは XML しか読めない古いシステムに設定を渡したい場合です。使うべきでない:XML 文書の編集。混合内容・コメント・名前空間があれば、往復したあとの文書は元とは別物で、しかも警告は出ません。XML の編集には元の形式を保つツールを使ってください。
関連ツール
JSON 整形
整形JSON をブラウザ内で整形・圧縮・検証。折りたたみ可能なツリーで表示し、キーと値の検索、行番号とハイライト付きの編集、Python dict への変換にも対応。
YAML 変換
整形YAML と JSON を双方向に変換します。複数ドキュメント、アンカーと別名、マージキーにも対応し、大きな整数も桁を失いません。エラーは行と列で示します。
TOML 変換
整形TOML と JSON を双方向に変換。4種類の日付・時刻、テーブル配列、ドットキーに対応し、大きな整数も失いません。すべてブラウザ内で処理します。
JSON → コード
整形JSON サンプルから TypeScript interface、Go struct、Java class、Rust struct を生成。欠けたキーは任意に、型の衝突は共用型に。すべてブラウザ内で処理します。
SQL 整形
整形SQL をオンラインで整形:キーワードの大文字小文字を統一し、SELECT / FROM / WHERE などの句ごとに改行。圧縮は余分な空白とコメントを削除します。
JSON5 変換
整形JSON5 を標準 JSON に変換。コメント・引用符なしキー・シングルクォート・末尾カンマ・16進数・Infinity に対応し、エラーは行と列を示します。