記事
Mihoko Iijima · 2020年8月5日 8m read

【はじめての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()
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 を開き対象ネームスペースに移動後
 クエリ実行タブで以下実行します。

SELECT JSON_OBJECT('Name':Name,'Email':Email) ABSENT ON NULL as json from Test.Person

 

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 を開き対象のネームスペースに移動後
 クエリ実行タブで以下実行します。

SELECT JSON_ARRAY(Name,Email ABSENT ON NULL) as array from Test.Person

 

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.Name="ジェイソン", json.Email="json@mail.com" 
zwrite json
set p1=##class(Test.Person).%New()
set st=p1.%JSONImport(json)
write st

 

14:24~ 確認できたこと

先頭へ戻る

00
1 0 0 123
Log in or sign up to continue