JSON to XML コンバーター
JSONを貼り付けると即座にXMLを取得。オブジェクト、配列、@_ 属性をブラウザ内で変換 — データは送信されません。無料、プライベート、登録不要。
オプション · 2スペース · JSON → XML
JSON to XML変換とは何ですか?どのように機能しますか?
JSON(JavaScript Object Notation)とXML(拡張マークアップ言語)はどちらも構造化データフォーマットですが、根本的に異なるモデルを持っています:JSONは属性やドキュメントルートの制約という概念を持たないオブジェクト、配列、文字列、数値、ブール値、null値のツリーです。XMLは属性とテキスト内容を持つ要素のツリーで、ドキュメントは正確に1つのルート要素を持つ必要があります。JSONからXMLへの変換には、この不一致を橋渡しする一連の規則が必要です。
このツールは最も広く採用されている規則を使用します — fast-xml-parser(Node.js)、xmltodict(Python)、JAXB(Java)と同じもの — を逆方向に適用します:
**1. ルート要素の正規化。** JSONとXMLの最も重要な違いはルートの制約です。JSONにはルートの概念がありません。XMLは正確に1つを必要とします。コンバーターは4つのケースを自動的に処理します。単一キーのオブジェクトはそのキーをXMLルートとして使用します:{ "config": {...} } →
**2. @_ プレフィックス → XML属性。** @_ でプレフィックスされたJSONキーは囲む要素のXML属性になります。{ "element": { "@_id": "42", "@_class": "primary" } } は
**3. #text → 要素のテキスト内容。** 要素に属性とテキスト内容の両方が必要な場合、テキストは #text キーに格納されます:{ "price": { "@_currency": "USD", "#text": "29.99" } } →
**4. 配列 → 繰り返す同名の兄弟要素。** XMLは同名の複数の子要素を許可します。JSONは順序付きリストに配列を使用します。キーの下のJSON配列は繰り返す子要素を生成し、キー名を再使用します:{ "items": ["a", "b"] } は
**5. XML to JSONと対称的。** ここで使用する @_ と #text 規則はコンパニオンツールの XML to JSONコンバーター で使用する規則と完全に同じです。これは JSON → XML → JSON の往復変換が属性、テキスト内容、要素構造を保持することを意味します — 入力JSONが @_/#text 規則に従っている限り。
**JSONをXMLに変換する場面は?** 最も一般的なシナリオは:(1) XMLリクエストボディを必要とするレガシーSOAPまたはXMLベースのWebサービスへのデータ送信;(2) JSONデータからXML設定ファイル(Spring、Maven、Ant、Androidリソース)の生成または変換;(3) JSONコンテンツデータからsitemap.xmlまたはRSSフィードXMLの生成(検索エンジンへの送信やフィードリーダーへのシンジケーション用);(4) XMLを消費するエンタープライズシステム(ERP、CRM、EDI)との相互運用;(5) JSONデータからSVGやその他のXMLベースのグラフィックフォーマットのプログラム的生成。結果のXMLを整形・バリデートするには XMLフォーマッター をご利用ください。
// Convert JSON to XML in Node.js using fast-xml-parser
import { XMLBuilder } from 'fast-xml-parser';
const data = {
catalog: {
product: {
'@_id': 'P01',
'@_category': 'electronics',
name: 'Wireless Headphones',
price: {
'@_currency': 'USD',
'#text': '79.99'
}
}
}
};
const builder = new XMLBuilder({
attributeNamePrefix: '@_', // @_ keys become XML attributes
textNodeName: '#text', // #text key becomes element text content
ignoreAttributes: false, // process @_ attribute keys
format: true, // pretty-print with indentation
indentBy: ' ', // 2-space indent
});
const xml = builder.build(data);
console.log(xml);
// <catalog>
// <product id="P01" category="electronics">
// <name>Wireless Headphones</name>
// <price currency="USD">79.99</price>
// </product>
// </catalog> 主な機能
ライブ変換
JSONを入力・貼り付けるとXML出力が即座に更新されます — 「変換」ボタンは不要です。大きな入力(>200KB)はブラウザのレスポンスを維持するために自動的に手動モードに切り替わります。
自動ルート正規化
XMLは正確に1つのルート要素を必要とします。単一キーのオブジェクトはそのキーをルートとして使用します。複数キーのオブジェクトは
@_ 属性と #text 規則
@_ でプレフィックスされたキーはXML属性になり、#text キーは要素のテキスト内容になります。これはfast-xml-parserとxmltodict規則に合致し、コンパニオンのXML to JSONコンバーターと対称的な出力を実現します。
配列から繰り返し要素へ
キーの下のJSON配列は繰り返す子要素を生成し、キー名を再使用します — 単数形への変換は行いません。{ "items": [1, 2, 3] } は3つの
100%ブラウザベースのプライバシー
すべての変換はJavaScriptを使用してブラウザ内でローカルに実行されます。クレデンシャル、内部設定、機密ペイロードを含むJSONはどのサーバーにも送信されず、記録されず、保存されません。
XML to JSONとの対称的な往復
@_ と #text 規則はコンパニオンのXML to JSONコンバーターと共有されます。JSON → XML → JSON の往復変換は属性、テキスト内容、ネストされた構造を忠実に保持します。
サンプル
APIレスポンスオブジェクト
{"user":{"id":42,"name":"Alice Kim","email":"alice@example.com","role":"admin","address":{"city":"Seoul","country":"KR"}}} トップレベルのキーがXMLのルート要素になる、単一キーのJSONオブジェクトです。ネストされたaddressオブジェクトは
トップレベルの配列
[{"id":1,"name":"Widget A","price":9.99},{"id":2,"name":"Widget B","price":14.99},{"id":3,"name":"Widget C","price":4.49}] 入力全体がJSON配列(オブジェクトにラップされていない)の場合、コンバーターは
属性とテキスト内容を持つオブジェクト
{"catalog":{"product":{"@_id":"P01","@_category":"electronics","name":"Wireless Headphones","price":{"@_currency":"USD","#text":"79.99"}}}} @_ でプレフィックスされたキーは要素のXML属性になります:@_id は
使い方
- 1
JSONを貼り付ける
上の入力フィールドにJSONデータを入力または貼り付けてください。「サンプルを読み込む」をクリックして、APIレスポンスオブジェクト、配列ペイロード、または @_ 属性と #text を使用したオブジェクトのサンプルを試すこともできます。
- 2
ライブXML出力を確認する
XMLは即座に出力パネルに表示されます。単一キーのオブジェクトはそのキーをルートとして使用します。複数キーのオブジェクトは
でラップされます。@_ プレフィックス付きキーは属性になります。配列は繰り返す子要素になります。必要に応じてインデント(2または4スペース)を調整してください。 - 3
コピーまたはダウンロード
「コピー」をクリックしてXMLをクリップボードに取得するか、「ダウンロード」をクリックして.xmlファイルとして保存してください。結果をバリデートまたは再整形するには、XMLフォーマッターに貼り付けてください。
よくある変換ミス
複数キーのオブジェクトに予期しない ラッパーが付く
トップレベルのJSONに複数のキーがある場合、出力はすべてを
// Input: { "status": 200, "data": { "id": 1 } }
// Output: <root><status>200</status><data><id>1</id></data></root>
// Root is <root> — may not match your schema // Wrap in a named key to control the root element
// Input: { "response": { "status": 200, "data": { "id": 1 } } }
// Output: <response><status>200</status><data><id>1</id></data></response> トップレベルの配列に - ラッパーが付く
トップレベルのJSON配列には要素名がないため、
// Input: [{ "id": 1 }, { "id": 2 }]
// Output: <root><item><id>1</id></item><item><id>2</id></item></root>
// Tag names are generic // Wrap in a named key for meaningful tag names
// Input: { "products": [{ "id": 1 }, { "id": 2 }] }
// Output: <root><products><id>1</id></products><products><id>2</id></products></root>
// Each array element reuses the key name "products" as its tag 属性キーに @_ プレフィックスがない
XML属性を生成するには、JSONキーに @_ プレフィックスが必要です。プレフィックスなしのキーは属性ではなく子要素として扱われます。
// Input: { "tag": { "id": "42", "name": "Alice" } }
// Output: <tag><id>42</id><name>Alice</name></tag> ← id is a child element // Use @_ prefix for attributes
// Input: { "tag": { "@_id": "42", "name": "Alice" } }
// Output: <tag id="42"><name>Alice</name></tag> ← id is an attribute 属性とテキスト内容の両方を持つ要素に #text がない
要素にXML属性とテキスト内容の両方を持たせる場合は、テキストに #text キーを使用する必要があります。ない場合、テキストの行き場がなく、要素が空になるかエラーが発生します。
// Input: { "price": { "@_currency": "USD", "value": "29.99" } }
// Output: <price currency="USD"><value>29.99</value></price>
// Text is a child element, not text content // Use #text for element text content
// Input: { "price": { "@_currency": "USD", "#text": "29.99" } }
// Output: <price currency="USD">29.99</price> ← text content XMLに無効な文字を含むJSONキー
XML要素名は数字で始まったり、スペース、コロン(名前空間プレフィックスを除く)、またはほとんどの特殊文字を含むことはできません。JSONキーにこれらの文字が含まれている場合、出力XMLは整形されません。変換前に問題のあるキーを名前変更するか、後処理ステップでサニタイズしてください。
// JSON key starts with digit — invalid XML element name
// Input: { "1stItem": "value" }
// Output: <1stItem>value</1stItem> ← invalid XML // Use a valid XML element name
// Input: { "firstItem": "value" }
// Output: <firstItem>value</firstItem> ← valid XML 値内の特殊文字がエスケープされていない
XMLテキスト内容には生の <、>、&、" 文字を含めることができません — <、>、&、" としてエスケープする必要があります。コンバーターは要素のテキスト内容と属性値でこれらの文字を自動的にエスケープします。ダウンストリームの処理が二重エスケープする場合は、XMLパーサーが再エスケープするのではなく、生のXMLバイトとして消費していることを確認してください。
// JSON: { "query": "name = 'Alice' & role = 'admin'" }
// Converter outputs: <query>name = 'Alice' & role = 'admin'</query>
// If double-processed: &amp; — consumer is re-escaping // Converter output is correct — consume it as XML, not as a raw string // <query>name = 'Alice' & role = 'admin'</query> // XML parser decodes to: name = 'Alice' & role = 'admin'
よくある使用場面
- SOAPおよびレガシーXML Webサービスの呼び出し
- アプリケーション内でJSONペイロードを構築し、XMLに変換して、SOAPエンドポイントにPOSTします。これにより手作業でXML文字列を構築することを避け、レガシーサービスへのシリアライズが必要になる瞬間まで、ネイティブなJSON構造でデータを扱えます。
- XML設定ファイルの生成
- Spring、Maven、Ant、Tomcat、AndroidはすべてXML設定フォーマットを使用します。設定データをJSONで生成または変換します — 差分確認やバージョン管理が容易 — その後デプロイのためにXMLに変換します。
- サイトマップとRSSフィードXMLの生成
- コンテンツ管理システムや静的サイトジェネレーターはページメタデータをJSONで保存することが多いです。そのメタデータをsitemap.xmlやRSSフィードXMLに変換して、検索エンジンに送信したりフィードリーダーにコンテンツをシンジケーションしたりします。
- エンタープライズデータ統合(EDI / ERP / CRM)
- ERPシステム(SAP、Oracle)、CRMプラットフォーム、EDIネットワークは一般的にXMLでデータをやり取りします。モダンなREST APIからのJSONエクスポートをXMLに変換して、カスタムXMLシリアライザーを構築せずにこれらのシステムに対応します。
- Androidリソースファイル
- Androidの文字列リソース、レイアウト制約、マニフェストエントリはすべてXMLです。JSONデータソースからリソースファイルをプログラム的に生成または更新し、Androidビルドシステムに必要なXMLフォーマットに変換します。
- SVGおよびベクターグラフィックスの生成
- SVGはXMLです。SVG構造をJSONデータとして構築します — パス、形状、色、変換 — その後XMLに変換してWebやプリント、ベクター編集ツール向けの有効なSVGファイルを生成します。
技術的詳細
- RFC 8259準拠のJSON解析
- JSON入力はブラウザのネイティブJSON.parse()を使用して解析されます。RFC 8259に完全準拠しており、位置情報(行番号と列番号のベストエフォート)を含む正確な構文エラーメッセージを提供し、文字列、数値、ブール値、null、配列、オブジェクトのすべてのJSONデータ型を処理します。
- カスタム再帰JSON to XMLシリアライザー
- 解析後、カスタム再帰シリアライザーがJSONツリーを走査します。@_ で始まるオブジェクトキーは親要素のXML属性として出力されます。#text キーは要素のテキスト内容として出力されます。プレーンなオブジェクトキーは子要素になります。配列値は繰り返す同名の兄弟要素を生成します。テキスト内容と属性値の特殊文字(<、>、&、"、')はXMLエンティティ参照にエスケープされます。
- ルート正規化
- XMLは正確に1つのルート要素を必要とするため、シリアライザーはドキュメント構築前にルート正規化を適用します:単一キーのオブジェクトはそのキーをルートとして使用し、複数キーのオブジェクトとトップレベルの配列には合成
ラッパーが追加されます。これにより入力の形状に関わらず出力が常に整形されたXMLであることを保証します。 - 100%ブラウザベース — アップロードなし、サーバーなし
- すべての処理はブラウザのJavaScriptエンジンで実行されます。いかなる時点でもデータはネットワーク経由で送信されません。200KBを超える入力はライブモードから手動モードへ自動的に切り替わります(明示的な「変換」クリックが必要)。ブラウザのレスポンスを維持し、重いシリアライゼーション中にメインスレッドがブロックされるのを防ぐためです。
ベストプラクティス
- 単一キーのオブジェクトでルート要素を制御する
- 意味のあるXMLを生成する最もクリーンな方法は、トップレベルのJSONを希望のルート要素名をキーとする単一キーのオブジェクトにすることです。複数キーのデータを1つの名前付きキーの下でラップすることで、汎用的な
ラッパーではなくセマンティクス的に意味のあるルートが得られます。 - 属性の多いXMLには @_ と #text を使用する
- ターゲットのXMLスキーマが多くの属性を使用する場合(設定ファイル、SVG、SOAPエンベロープで一般的)、変換前にJSONを @_ プレフィックスキーと #text を使用するように整形してください。結果のXMLは後処理なしにターゲットスキーマと正確に一致します。
- 意味のあるタグ名のために配列を名前付きオブジェクトでラップする
- トップレベルの配列は汎用的な
パターンを生成します。ここで- ...
- は固定リテラル名です。配列を名前付きキーの下でラップすることで — { "products": [...] } — 繰り返す
要素(キー名が各配列要素に再使用)が ラッパーの下に生成されます。これにより意味のあるタグ名が得られ、スキーマで解析またはバリデートされるXMLではほぼ常に好ましい形式です。 - XMLフォーマッターで出力をバリデートする
- 変換後、XMLの出力を XMLフォーマッター に貼り付けて整形性をバリデートし、インデントを確認し、XMLをダウンストリームサービスに送信したりバージョン管理にコミットしたりする前に構造上の問題を特定してください。
- 変換前にJSONキーをサニタイズする
- XML要素名はアルファベットまたはアンダースコアで始まり、スペースやほとんどの特殊文字を含むことはできません。JSONキーが外部ソース(データベースカラム名、APIフィールド名、ユーザー入力)から来ている場合は、不正な出力を避けるために変換前にXML名の有効性を確認してください。
よくある質問
このツールを使うとJSONデータがサーバーに送信されますか?
ツールはXMLのルート要素をどのように決定しますか?
なぜ複数キーのJSONオブジェクトは でラップされるのですか?
トップレベルのJSON配列はどのようにXMLに変換されますか?
JSONキーをXML属性に変換するには?
#text キーは何に使いますか?
インデントはXML構造に影響しますか?
オブジェクト内にネストされたJSON配列はどのようにXMLに変換されますか?
XMLをJSONに戻すには?
XML出力をバリデートまたは整形できますか?
JSON入力にファイルサイズの制限はありますか?
どのJSON型がサポートされていますか?
関連ツール
すべてのツールを見る →Base64エンコーダー&デコーダー
エンコーディングとフォーマット
Base64のデコード・エンコードが無料でオンラインで行えます。リアルタイム変換、UTF-8・絵文字対応。100%ブラウザ上で動作しデータは外部に送信されません。登録不要。
CSV to JSON 変換ツール
エンコーディングとフォーマット
CSVをブラウザ内で即座にJSONに変換。RFC 4180・型推論・ヘッダー行・大整数安全対応。100%プライベート、アップロード不要。
JSON Diff(差分)
エンコーディングとフォーマット
2つのJSONファイルをブラウザで即座に比較・差分確認。サイドバイサイドのハイライト表示、RFC 6902 JSON Patch出力、タイムスタンプやIDなどのノイズフィールドを無視。100%プライベート、アップロード不要。
JSONフォーマッター&バリデーター
エンコーディングとフォーマット
無料オンラインJSON整形ツール。ブラウザ上でJSONのフォーマット、構文検証、圧縮を即座に実行。エラー検出、ワンクリックコピー対応。データは端末外に送信されず、100%プライバシー保護。
JSON Schema バリデーター
エンコーディングとフォーマット
JSON を任意の JSON Schema に対してブラウザで即座に検証。Draft 2020-12 / 2019-09 / Draft-07 をサポートし、エラーメッセージは JSON Pointer パスで正確に位置を示します。100% プライベート、アップロード不要、無料。
JSON to CSV 変換ツール
エンコーディングとフォーマット
JSONをブラウザ内で即座にCSVに変換。RFC 4180・Excel-EU・TSV・Pipeプリセット対応。ネスト平坦化または文字列化。100%プライベート、アップロード不要。