記事
· 2024年6月6日 2m read

JSON_Table(SQL)の利用

これは、InterSystems FAQサイトの記事です。

IRIS/IRIS for Health2024.1以降のバージョンのSQLで、JSON_TABLE関数がサポートされています。
【ドキュメント】JSON_TABLE(SQL)

これを使用することにより、JSON形式データを表形式で取得することが出来ます。

【例】郵便番号情報を外部から取得し、表形式にマッピングする。
(取得データ(JSON))

{
	"message": null,
	"results": [
		{
			"address1": "東京都",
			"address2": "新宿区",
			"address3": "西新宿",
			"kana1": "トウキョウト",
			"kana2": "シンジュクク",
			"kana3": "ニシシンジュク",
			"prefcode": "13",
			"zipcode": "1600023"
		}
	],
	"status": 200
}

(SQL例)
 ※下記の実行には、SSL構成が必要になります。事前に構成を作成して、その構成名を使用してください。

SELECT
address1,address2,address3,kana1,kana2,kana3,zipcode
FROM JSON_TABLE(%Net.GetJson('https://zipcloud.ibsnet.co.jp/api/search?zipcode=1600023',
                             '{"SSLConfiguration":"test"}') , 
                             '$.content.results' COLUMNS ( address1 VARCHAR(100) PATH '$.address1', 
                                                           address2 VARCHAR(100) PATH '$.address2', 
                                                           address3 VARCHAR(100) PATH '$.address3', 
                                                           kana1 VARCHAR(100) PATH '$.kana1', 
                                                           kana2 VARCHAR(100) PATH '$.kana2', 
                                                           kana3 VARCHAR(100) PATH '$.kana3', 
                                                           zipcode VARCHAR(10) PATH '$.zipcode') ) as zipinfo

(取得結果(表形式))
  

 

2024.1より前のバージョンで、同様のことを行いたい場合は、以下のようにJSONを取得してパースし、テーブルに格納する処理を作成して対応します。

(ObjectScript例)

 set httprequest=##class(%Net.HttpRequest).%New()
 set httprequest.Https=1
 set httprequest.Server="zipcloud.ibsnet.co.jp"
 set httprequest.SSLConfiguration="test"
 set st=httprequest.Get()
 set st=httprequest.Get("/api/search?zipcode=1600023")
 set response=[].%FromJSON(httprequest.HttpResponse.Data)
 set results=response.results
 set iter=results.%GetIterator()
 while iter.%GetNext(.key,.resultobj) {
    //ZipInfoクラスにセット 
    set zipinfo=##class(FAQTest.ZipInfo).%New()
    set zipinfo.address1=resultobj.address1
    set zipinfo.address2=resultobj.address2
    set zipinfo.address3=resultobj.address3
        /*中略*/
    set zipinfo.zipcode=resultobj.zipcode       
      
    set st = zipinfo.%Save()
 }
ディスカッション (0)1
続けるにはログインするか新規登録を行ってください