これは InterSystems FAQ サイトの記事です。
ダイナミックオブジェクトから JSON 文字列を生成するときに使用する %ToJSON() の引数にストリームオブジェクトを指定することでエラーを回避できます。
コード例は以下の通りです。
USER>set temp=##class(%Stream.TmpCharacter).%New()
USER>set jsonobj={}
USER>set jsonobj.pro1=["a","b","c","d"]
USER>set jsonobj.pro2=["あ","い","う","え"]
USER>do jsonobj.%ToJSON(temp)
USER>write temp.Size
51
USER>write temp.Read()
{"pro1":["a","b","c","d"],"pro2":["あ","い","う","え"]}
詳細はドキュメントもご参照下さい。
こんにちは、mihokoさん
%Stream.TmpCharacterクラスを使用した場合、IRISTEMPデータベースにデータが書き込まれると理解してよろしいでしょうか?
また、作成したストリームデータは明示的に削除する必要はありますか?
こんにちは、Amanoさん
ご質問ありがとうございます!
確認してみたところ、ご質問いただいたように、IRISTEMP に書くには書くのですが、大きなサイズになったときにプロセスプライベートグローバル(=PPG。こちらも IRISTEMP に格納される変数)へセットしていました。
ちなみに、上に書いているサンプルだと、PPG は使用していませんでした。
削除についてですが、ストリームを格納した変数を消去すると使用していた PPG も消えますので、「ストリームをセットした変数を kill する」を入れるのが確実だと思います(メソッド終了でローカル変数も消えますが、明示的に書いた方がわかりやすいかな、と思いました)。
確認するまで私も知りませんでしたので、ご質問いただきありがとうございました!
mihokoさん
%Stream.TmpCharacterクラスは便利そうですね。
回答ありがとうございました。