これは、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()
}