プログラミング言語SML#解説 3.7.1版
13 SML#の拡張機能:動的型付け機構とJSONの型付き操作

13.5 JSONの操作

SML#では以下の構文および関数を提供します.

  • JSONの読み込み.

    Dynamic.fromJson : string -> Dynamic.void Dynamic.dyn

    この関数は,JSON文字列を構文解析し,動的部分レコードとして 読み込みます. 構文解析に失敗した場合は Dynamic.RuntimeTypeError例外を発生させます. Dynamic.voidは, 値の構造が一切判明していないことを表します.

  • JSONの動的型検査 _dynamic exp as τ および 動的型検査を伴うパターンマッチ _dynamiccase式. 13.1節で述べたこれらの式は JSONの検査にもそのまま使えます. τには以下の型を書くことができます.

    • intboolstringなどの基本型, レコード型,リスト型,およびこれらの組み合わせ. JSONデータがτが表す構造に一致するときのみ,キャストは 成功します.

    • 部分動的レコード型 {l1:τ1, , ln:τn} Dynamic.dyn. JSONデータが少なくとも l1,,lnn個のラベルを持ち, 各ラベルの値がτ1,,τnにキャストできるとき,キャストは 成功します.

    • 構造が判明していない型 Dynamic.void Dynamic.dyn. この型へのキャストは常に成功します.

    • 以上の型を自由にネストさせた組み合わせ.

  • 静的なビューの取得.

    Dynamic.view : [’a#reify. ’a Dynamic.dyn -> ’a]

    この関数は, 与えられたJSONデータのうち,静的に構造が判明している部分のみを MLのデータに変換します. 引数がDynamic.void Dynamic.dyn型のときは Dynamic.RuntimeTypeError例外が発生します.

  • JSONプリンタ.

    Dynamic.toJson : [’a#reify. ’a Dynamic.dyn -> string]

    この関数は,与えられたJSONデータの文字列表現を返します. 文字列表現には,’aのインスタンスによらず,JSONデータに 含まれる全体が含まれます.

その他,動的型付けやリーフィケーションの諸機能も,型が示すように, そのままJSONに用いることができます. 逆に,動的型付けされた値を部分動的レコードにすることも可能です.