JSON
JSONストリームは、JSONを扱うためのストリームです。
ストリームプロパティ
| プロパティ名 | 値 | ||||||
|---|---|---|---|---|---|---|---|
| インデント | 出力時にインデントを行うかどうかを指定します。
|
||||||
| インデント文字 | 出力時にインデントを行う場合に、インデントに使用する文字を指定します。
|
フィールド定義
フィールド名、データ型、配列、表示名を定義します。
| フィールド名 | JSONオブジェクトのキーを指定します。 |
|---|---|
| データ型 | String、Boolean、Integer、Double、Decimalのいずれか。 Binary、DateTimeは指定できません。 |
| 配列 | キーに対応する値が配列となるかどうか指定します。 |
| 表示名 | マッパーでの表示名を指定します。フィールド名であるキー名がわかりにくい場合、マッピングウィンドウで参照するフィールド名を表示名で表示することにより、わかりやすくマッピングを行うことができます。 |
フィールドの階層を移動するには、移動したいフィールドを選択し、右クリックして表示されるメニューから「下の枝に移動」「上の枝に移動」をクリックします。上位階層のフィールドを親フィールド、下位階層のフィールドを子フィールドと呼びます。
注意
- 便宜上JSONのフィールド定義の最上位は「root」となっていますが、これは出力には含まれません。
- 最上位である「root」フィールドの「配列」の値が「はい」の場合、最上位が配列であるJSONが出力されます。
- 次の3つのフィールドのデータ型の指定は無視されます。
- 最上位である「root」フィールド
- 「配列」の値が「はい」のフィールド
- 子フィールドが定義されているフィールド
フィールド名
フィールド名はその階層でのキーの名前です。
原則JSON仕様に準ずる文字を使用できますが、フィールド名に「/」を含めることはできません。
フィールドの値
フィールドの値は、「フィールド名」で表されるキーに対応する値となります。つまり最終的に文字列にした場合には、
"フィールド名": 値という形式になります。
「データ型」がStringの場合、値は「"」(ダブルクォート)で囲まれます。もしもフィールドに「null」がマッピングされた場合は「"フィールド名": null」とはならず、そのフィールド自体が出力されなくなります。(「"key": undfined」と同義)
子フィールドを持つフィールドの値はその値を表すJSON文字列になります。
JSONフィールド定義の例
| フィールド名 | データ型 | 配列 |
|---|---|---|
| root | String | いいえ |
| 住所録 | String | はい |
| 番号 | Integer | いいえ |
| 名前 | String | いいえ |
| 姓 | String | いいえ |
| 名 | String | いいえ |
上記のフィールド定義による出力例
{
"住所録": [
{
"番号": 1,
"名前": {
"姓": "佐藤",
"名": "渚"
}
},
{
"番号": 2,
"名前": {
"姓": "鈴木",
"名": "かおる"
}
}
]
}
配列の値
配列が子フィールドを持たない場合、配列の値として同じ値が存在していても省略されることなくすべての値が出力されます。例えば、次のようなレコードを考えます。
| 都道府県 | 氏名 |
|---|---|
| 東京 | 佐藤渚 |
| 神奈川 | 鈴木かおる |
| 大阪 | 田中ひかる |
| 東京 | 斉藤はじめ |
"都道府県": ["東京", "神奈川", "大阪", "東京"]
配列の最初と最後に"東京"が出力されます。このように重複する値は省略されません。
それに対して、配列が子フィールドを持つ場合は、重複した値は省略されます。例えば、マッピングした結果、配列の要素が次のように2個とも同じである場合、
"住所": [
{
"都道府県": "東京",
"氏名": "佐藤渚"
},
{
"都道府県": "東京",
"氏名": "佐藤渚"
}
]
JSONストリームの出力では重複した値は省略されて配列の要素は1個だけになります。
"住所": [
{
"都道府県": "東京",
"氏名": "佐藤渚"
}
]
配列の要素が0個の場合、空の配列つまり「"フィールド名":[]」とはならず、そのフィールド自体が出力されなくなります。
レコード数
ストリームのレコード数は、配列フィールドの有無によって以下のように決まります。
- フィールド定義中に配列フィールドが1つもない場合、レコード数は1になります。
- 配列フィールドが1つだけある場合、レコード数はその配列の要素数になります。
- 配列フィールドが階層関係を持たずに複数ある場合、レコード数はそれぞれの要素数の直積になります。
- 配列フィールドが階層関係を持って複数ある場合は、それぞれの配列のレコード数は下位のレコード数となり、全体のレコード数はその総和となります。ただし、マッパーではマッピングに使用されているフィールドだけでフィールド定義が再構成されるので、ストリームのレコード数とマッパーで使用されるレコード数が異なる場合があります。
この仕様はXMLの場合とほぼ同様です。