記事
· 2025年9月3日 2m read

大量データをJSON形式で渡す方法

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

ダイナミックオブジェクトの%ToJSONメソッドを利用することで簡単にJSONデータを送信することができます。

但し、標準的な方法では、出力するJSONのデータがIRIS文字列の最大長(約32万文字 正確には$SYSTEM.SYS.MaxLocalLength()が返す値)を超えると<MAXLENGTH>エラーとなります。

これを回避するためには、文字列として返すのではなく、%ToJSONメソッドの出力先としてStreamを指定し、その結果作成されたそのStreamデータを順次読み取って、出力先に書き出すようにする必要があります。

以下のように処理できます。

ClassMethod bigjson() As %Status [ ProcedureBlock = 0 ]

{

   set x={}

   for i=1:1:100 { 

       set cmd=" set x.a"_i_" = ^a "    ;; ^aのサイズは1MB
       xecute cmd

   }


   set tmpStream = ##class(%Stream.GlobalCharacter).%New()

   do x.%ToJSON(tmpStream) 

   while tmpStream.AtEnd'=1 {

       write tmpStream.Read(1000)

   }

   quit $$$OK
}

 

なお、このような処理はREST APIの実装として用いられることが多いと想定されますが、あまりの大量データを一度にREST経由で送信することは、ネットワーク帯域の逼迫や応答時間の増大等の影響が懸念されるため、その処理の適切性について十分考慮する必要があり、場合によっては、他の方法を検討した方が良いケースもあります。

ディスカッション (0)1
続けるにはログインするか新規登録を行ってください