ルート要素としてのJSON配列の変換
トップレベルのJSON値が配列でオブジェクトではないケースを処理する方法。ルート要素のラッピング戦略と配列ベースXML出力の命名規則を解説します。
Advanced
詳細な説明
トップレベルのJSON値が配列の場合、XMLへの変換にはXMLが正確に1つのルート要素を要求するため、特別な処理が必要です。
ルートとしてのJSON配列:
[
{ "name": "Alice", "age": 30 },
{ "name": "Bob", "age": 25 },
{ "name": "Carol", "age": 35 }
]
変換戦略:
戦略1:汎用 <root> ラッパー
<root>
<item>
<name>Alice</name>
<age>30</age>
</item>
<item>
<name>Bob</name>
<age>25</age>
</item>
<item>
<name>Carol</name>
<age>35</age>
</item>
</root>
戦略2:セマンティックなラッパー名
<users>
<user>
<name>Alice</name>
<age>30</age>
</user>
...
</users>
戦略3:インデックス付き要素
<root>
<item index="0">
<name>Alice</name>
<age>30</age>
</item>
...
</root>
なぜ難しいのか:
- JSON配列は固有のコンテナ名を持たない順序付きコレクションです。配列自体にはラベルがなく、コンテンツのみがあります。
- XMLではすべての要素にタグ名が必要です。ルート配列にはラッパー要素名とアイテム要素名の両方が必要です。
- コンバーターはデータだけからセマンティックな名前(
users/user)を推測できません。設定されない限り汎用名を使用します。
ベストプラクティス: ユーザーがルートとアイテムの要素名を指定できるようにします。デフォルトは <root> と <item> ですが、カスタマイズのオプションを提供します。
ユースケース
検索結果のベア配列を返すJSON APIレスポンスを、HTMLレポートを生成するXSLT変換パイプラインに投入するためにXMLに変換する場合。