これは InterSystems FAQ サイトの記事です。
ダイナミックオブジェクトの%ToJSONメソッドを利用することで簡単にJSONデータを送信することができます。
但し、標準的な方法では、出力するJSONのデータがIRIS文字列の最大長(約32万文字 正確には$SYSTEM.SYS.MaxLocalLength()が返す値)を超えると<MAXLENGTH>エラーとなります。
これを回避するためには、文字列として返すのではなく、%ToJSONメソッドの出力先としてStreamを指定し、その結果作成されたそのStreamデータを順次読み取って、出力先に書き出すようにする必要があります。
以下のように処理できます。
ClassMethod bigjson() As%Status [ ProcedureBlock = 0 ]
{
setx={}
for i=1:1:100 {
set cmd=" set x.a"_i_" = ^a ";; ^aのサイズは1MBxecute cmd
}
set tmpStream = ##class(%Stream.GlobalCharacter).%New()
dox.%ToJSON(tmpStream)
.png)

.png)




.png)


.png)

.png)
.png)