【はじめてのInterSystems IRIS】セルフラーニングビデオ:アクセス編:IRIS での JSON の操作
IRIS サーバ側で JSON の操作を行う方法を解説します(3つのビデオに分かれています)。
ビデオ② :ダイナミックエンティティで利用できるメソッドの練習
ビデオ③ :SQL関数と %JSON.Adapter の使い方
なお、このビデオには、以下の関連ビデオがあります。ぜひご参照ください。
ビデオ①
このビデオの目次は以下の通りです。
最初~ 復習ビデオ/関連ビデオについて など
2:05~ JSONとは?
3:26~ JSONオブジェクト:ダイナミックエンティティの作成
//%DynamicObjectを使用した例
set json=##class(%DynamicObject).%New()
set json.Name="テスト太郎"
set json.Address="東京都新宿区"
write json.%ToJSON()
// 出力結果は以下の通り
{"Name":"テスト太郎","Address":"東京都新宿区"}
//リテラルJSONコンストラクタ {} を使用した例
set json={} // %DynamicObjectと一緒
set json.Name="テスト太郎",json.Address="東京都新宿区"
write json.%ToJSON()
// 出力結果は以下の通り
{"Name":"山田太郎","Address":"東京都新宿区"}
7:25~ JSON配列:ダイナミックエンティティでの作成例
//%DynamicArrayを使用した例
set array=##class(%DynamicArray).%New()
set array."0"="配列1" // 配列はインデックス番号0からスタート
set array."1"="配列2"
write array.%ToJSON()
// 出力結果は以下の通り
["配列1","配列2"]
//リテラルJSONコンストラクタ [] を使用した例
set array=[] // %DynamicArrayと一緒
set array."0"="配列1",array."1"="配列2"
write array.%ToJSON()
// 出力結果は以下の通り
["配列1","配列2"]
9:49~ ダイナミックエンティティ操作用のメソッド
※ ビデオ②に続きます
ビデオ②
もくじは以下の通りです。
00:00~ %Set()、%Get()、%Remove() オブジェクト編
set obj={}
set obj.Name="山田太郎"
do obj.%Set("Zip","160-0023")
do obj.%Set("Tel","03-5321-6200")
write obj.%ToJSON()
write obj.%Get("Zip")," - ",obj.%Get("Name")
do obj.%Remove("Zip")
write obj.%ToJSON()
set obj.Pref="東京都"
write obj.%ToJSON()
do obj.%Set("City","新宿区")
write obj.%ToJSON()
02:02~ %Set()、%Get()、%Remove() 配列編
set array=[]
do array.%Set(0,"最初")
write array.%ToJSON()
set array."4"="最後" //set array."番号"="値" は array.%Set("番号","値")と同等
do array.%Set(2,"真中")
write array.%ToJSON()
do array.%Pop()
write array.%ToJSON()
do array.%Push("Pushしたデータ")
write array.%ToJSON()
do array.%Remove(1) // 左から2番目の null を削除
write array.%ToJSON()
03:34~ JSON配列 要素の操作:%Size()、%Get()
set array=["最初",null,""]
do array.%Set(4,"最後") // インデックス番号3 はJSONのnullを設定
write array.%ToJSON()
// 出力結果は以下の通り
["最初",null,"",null,"最後"]
for i=0:1:array.%Size()-1 w array.%Get(i),!
// 出力結果は以下の通り
最初
最後
05:20~ 値が有効値かどうか確認する %IsDefined()
set array=["最初",null,""]
do array.%Set(4,"最後") // インデックス番号3 はJSONのnullを設定
write array.%ToJSON()
// 出力結果は以下の通り
["最初",null,"",null,"最後"]
for i=0:1:array.%Size()-1 {write array.%Get(i)," - 有効値?",array.%IsDefined(i),!}
// 出力結果は以下の通り
最初 - 有効値?1
- 有効値?1
- 有効値?1
- 有効値?0
最後 - 有効値?1
07:38~ 反復処理:配列の場合:%GetIterator()
set array=["最初",null,""]
do array.%Set(4,"最後") // インデックス番号3 はJSONのnullを設定
write array.%ToJSON()
// 出力結果は以下の通り
["最初",null,"",null,"最後"]
set iter=array.%GetIterator()
while iter.%GetNext(.key,.val) { write key," - value= ",val,! }
// 出力結果は以下の通り
0 - value= 最初
1 - value=
2 - value=
4 - value= 最後
09:55~ 反復処理:オブジェクトの場合:%GetIterator()
set obj={"Name":"山田太郎","Zip":"160-0023","Pref":"東京都","City":"新宿区"}
write obj.%ToJSON()
// 出力結果は以下の通り
{"Name":"山田太郎","Zip":"160-0023","Pref":"東京都","City":"新宿区"} set iter=obj.%GetIterator()
set iter=obj.%GetIterator()
while iter.%GetNext(.key,.val) { write key," - value= ",val,! }
// 出力結果は以下の通り
Name - value= 山田太郎
Zip - value= 160-0023
Pref - value= 東京都
City - value= 新宿区
10:11~ JSON null/true/false (ObjectScriptの中での対応)
set array=[null,true,false,1,0,""]
set array."7"="値あり"
for i=0:1:array.%Size()-1 { write i," - ",array.%Get(i),! }
// 出力結果は以下の通り
0 -
1 - 1
2 - 0
3 - 1
4 - 0
5 -
6 -
7 - 値あり
11:40~ JSONのデータタイプを確認する= %GetTypeOf()メソッド
set array=[null,true,false,1,0,""]
set array."7"="値あり"
for i=0:1:array.%Size()-1 {write i," - ",array.%Get(i)," - ",array.%GetTypeOf(i),! }
// 出力結果は以下の通り
0 - - null
1 - 1 - boolean
2 - 0 - boolean
3 - 1 - number
4 - 0 - number
5 - - string
6 - - unassigned
7 - 値あり - string
12:32~ JSONのデータタイプを指定して値を設定する
set array=[]
do array.%Set(0,"","null") // 第2引数はスクリプト上のnull
do array.%Set(1,1,"number") //数字の1として設定
do array.%Set(2,0,"number") //数字の0として設定
do array.%Set(3,1,"boolean") // booleanの1=trueとして設定
do array.%Push(0,"boolean") // booleanの0=false として設定
for i=0:1:array.%Size()-1 { write i," - ",array.%Get(i)," - ",array.%GetTypeOf(i),! }
// 出力結果は以下の通り
0 - - null
1 - 1 - number
2 - 0 - number
3 - 1 - boolean
4 - 0 - boolean
write array.%ToJSON()
// 出力結果は以下の通り
[null,1,0,true,false]
13:38~ ObjectScriptの変数や表現式を [] や {} で使用する方法
set obj={"日付":($ZDATE($H,16)),"時刻":($ZTIME($PIECE($H,",",2)))}
write obj.%ToJSON()
set mgr=$system.Util.ManagerDirectory()
set array=[($system.Util.InstallDirectory()),(mgr)]
write array.%ToJSON()
※ ビデオ③へつづきます
ビデオ③
もくじは以下の通りです。
00:00~ テーブルデータをJSONオブジェクト、JSON配列で取得する方法 概要
関連ビデオのご紹介
(Test.Personの作り方を確認する場合に良いビデオ)
上記ビデオの 13:20~(スタジオでの操作)/18:44~(VS Code での操作) で作成方法を紹介しています。
00:54~ SQL:SELECTでの操作 JSON_OBJECT()関数 説明と実演
管理ポータル→システムエクスプローラ→SQL を開き対象ネームスペースに移動後
クエリ実行タブで以下実行します。
02:42~ JSON_OBJECT()例(埋込SQLでの実行例)
Class Test.JSONTest
{
ClassMethod GetAllPerson()
{
//埋込SQL
&sql(declare C1 cursor for
select JSON_OBJECT('Name':Name,'Email':Email) as json into :json from Test.Person)
&sql(open C1)
set array=[]
for {
&sql(fetch C1)
if SQLCODE'=0 {
quit
}
set obj={}.%FromJSON(json)
do array.%Push(obj)
}
&sql(close C1)
write array.%ToJSON()
}
}
//実行文
do ##class(Test.JSONTest).GetAllPerson()
07:00~ SQL:SELECTでの操作 JSON_ARRAY()関数
管理ポータル→システムエクスプローラ→SQL を開き対象のネームスペースに移動後
クエリ実行タブで以下実行します。
07:50~ JSON_ARRAY()例(ダイナミックSQL実行例)
ClassMethod GetAllPersonArray()
{
set sql="SELECT JSON_ARRAY(Name,Email ABSENT ON NULL) as array from Test.Person"
set stmt=##class(%SQL.Statement).%New()
set status=stmt.%Prepare(sql)
set rset=stmt.%Execute()
set root=[]
while rset.%Next() {
set array=[].%FromJSON(rset.%Get("array"))
do root.%Push(array)
}
do root.%ToJSON()
}
//実行文
do ##class(Test.JSONTest).GetAllPersonArray()
08:59~ JSONアダプタ(%JSON.Adapter)
set person=##class(Test.Person).%OpenId(1)
set status=person.%JSONExport()
write status
10:08~ オブジェクト→JSON文字列を含むストリーム %JSONExportToStream() 説明と実演
set person=##class(Test.Person).%OpenId(1)
set st=person.%JSONExportToStream(.jstream)
write st
write jstream.Read()
write jstream.Rewind()
set jobj={}.%FromJSON(jstream.Read())
write jobj.Name
write jobj.Email
12:59~ オブジェクト→JSON文字列にマッピング %JSONExportToString()
set person=##class(Test.Person).%OpenId(1)
set st=person.%JSONExportToString(.jstring)
write st
write jstring
set jobj={}.%FromJSON(jstring)
write jobj.Name
write jobj.Email
13:20~ JSON文字列→オブジェクトへのマッピング %JSONImport()
set json={}
set json.Name="ジェイソン", json.Email="json@mail.com"
zwrite json
set p1=##class(Test.Person).%New()
set st=p1.%JSONImport(json)
write st
14:24~ 確認できたこと