JSON変換におけるXML属性の処理
XML属性がJSONでどのように表現され、JSONからXMLへの変換時に属性生成をどう制御するかを学びます。@プレフィックス規約と属性vs要素の選択を解説します。
XML Features
詳細な説明
XML属性は要素に付加されたメタデータで、JSONには直接的な等価物がありません。正確な双方向変換のために、それらを正しく処理することが重要です。
属性を持つXML:
<product id="A001" currency="USD">
<name>Widget</name>
<price>29.99</price>
</product>
JSON表現(@プレフィックス規約を使用):
{
"product": {
"@id": "A001",
"@currency": "USD",
"name": "Widget",
"price": "29.99"
}
}
JSONでの属性の一般的な規約:
| 規約 | 属性の表現 | 例 |
|---|---|---|
@ プレフィックス |
"@id": "A001" |
最も一般的、xml2jsで使用 |
- プレフィックス |
"-id": "A001" |
BadgerFish規約 |
_attributes オブジェクト |
"_attributes": { "id": "A001" } |
明示的なグループ化 |
| フラット(区別なし) | "id": "A001" |
シンプルだが可逆性が失われる |
属性 vs 要素を使う場面:
XMLデザインでの一般的なガイドラインは:
- 属性はメタデータ用(ID、型、フォーマット、言語コード)
- 要素は実際のデータコンテンツ用
JSONからXMLへの属性生成:
JSONからXMLに変換する際、@ プレフィックスを使用してどのフィールドが属性になるかを制御できます。
重要な制約: XML属性値は文字列でなければならず、子構造を含めることはできません。属性は同じ要素で繰り返すことはできません。属性の順序はXMLパーサーによって保持されることが保証されていません。
ユースケース
SKU識別子と通貨コードに属性を使用するXML商品カタログをWebストアフロント用にJSONに変換し、XMLへの正確なラウンドトリップ変換のために属性の区別を保持する場合。