以前のエントリで JSON にある配列の最初の要素から特定の項目の値を取得するコードを書きました。
今回は、配列にあるすべての要素から特定の項目の値を書き出すコードをご紹介したいと思います。
JSON 今回扱うJSON文字列ですが、 results という配列に1つ以上(以下の例では3つ)の要素があり、それぞれの要素に address1 から address3 までの項目があるものとします。
{
"results": [
{
"address1":"a-1",
"address2":"a-2",
"address3":"a-3"
},
{
"address1":"b-1",
"address2":"b-2",
"address3":"b-3"
},
{
"address1":"c-1",
"address2":"c-2",
"address3":"c-3"
}
]
}
"results": [
{
"address1":"a-1",
"address2":"a-2",
"address3":"a-3"
},
{
"address1":"b-1",
"address2":"b-2",
"address3":"b-3"
},
{
"address1":"c-1",
"address2":"c-2",
"address3":"c-3"
}
]
}
ここから address1 から address3 の値を取得するコードは以下のようになります。
Dim JSON As String
Dim nav As NotesJSONNavigator
Dim elm As NotesJSONElement
Dim arr As NotesJSONArray
Dim i As Long
JSON = |{"results": [{"address1":"a-1","address2":"a-2","address3":"a-3"},{"address1":"b-1","address2":"b-2","address3":"b-3"},{"address1":"c-1","address2":"c-2","address3":"c-3"}]}|
Set nav = ss.CreateJSONNavigator(JSON)
Set elm = nav.Getelementbypointer("/results")
Set arr = elm.Value
For i = 0 To arr.Size - 1
Print nav.Getelementbypointer( "/results/" & CStr( i ) & "/address1" ).Value
Print nav.Getelementbypointer( "/results/" & CStr( i ) & "/address2" ).Value
Print nav.Getelementbypointer( "/results/" & CStr( i ) & "/address3" ).Value
Nextちなみに、ここでは要素 results のタイプが配列であることがあらかじめわかっているので、elm の値を NotesJSONArray クラスのインスタンス arr へセットしていますが、タイプがわかっていない場合は NotesJSONElement クラスの Type プロパティで調べることができます。
下表は type プロパティの値を比較する際に使用できる定数の名前とその値です。
| タイプ | 値(Integer) |
| Jsonelem_type_object | 1 |
| Jsonelem_type_array | 2 |
| Jsonelem_type_string | 3 |
| Jsonelem_type_number | 4 |
| Jsonelem_type_boolean | 5 |
| Jsonelem_type_empty | 64 |
話を元にもどします。
JSON の配列の要素の数を知りたいとき、NotesJSONArray クラスのプロパティ Size を呼び出します。配列要素の数が1つなら、Size の戻り値は1となります。
14行目から16行目で "/Results/[配列要素の番号]/AddressX" のようにして、それぞれの要素から値を取り出します。配列要素の番号は、最初の要素が0番から始まるため、13行目では値の範囲を 0 から<Size の戻り値から1を引いた値>までとしています。
0 件のコメント:
コメントを投稿