2020年8月22日土曜日

資料をアップしました「初めての HCL Sametime」

2020年8月度の「のの会」の翌日から夏季休暇をいただいたこともあってすっかり失念しておりましたが、お話しましたことを SlideShare へアップしました。 資料公開までの間に Sametime 11.0 FP2 のリリースがありましたので、資料を少し加筆修正しました。 これから Sametime に触れる方の参考になれば幸いです。

2020年8月20日木曜日

JSON から目的の値を取り出す(2)

 以前のエントリで 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"
  }
 ]
}


ここから 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


コードの10行目では、GetElementByPointer メソッドを使い、JSON から要素 results を取得して NotesJSONElement クラスのインスタンス elm を作ります。

ちなみに、ここでは要素 results のタイプが配列であることがあらかじめわかっているので、elm の値を NotesJSONArray クラスのインスタンス arr へセットしていますが、タイプがわかっていない場合は NotesJSONElement クラスの Type プロパティで調べることができます。

下表は type プロパティの値を比較する際に使用できる定数の名前とその値です。
タイプ値(Integer)
Jsonelem_type_object1
Jsonelem_type_array2
Jsonelem_type_string3
Jsonelem_type_number4
Jsonelem_type_boolean5
Jsonelem_type_empty64

話を元にもどします。

JSON の配列の要素の数を知りたいとき、NotesJSONArray クラスのプロパティ Size を呼び出します。配列要素の数が1つなら、Size の戻り値は1となります。

14行目から16行目で "/Results/[配列要素の番号]/AddressX" のようにして、それぞれの要素から値を取り出します。配列要素の番号は、最初の要素が0番から始まるため、13行目では値の範囲を 0 から<Size の戻り値から1を引いた値>までとしています。