JSON Pointer: Retrieve the data type as numeric


using JSON Pointer..

ASTER::EXPRESSION::JSON::Using JSON Pointer; Get As Num

JSON Pointer で指定されたパスからデータを数値として取得

CF25 は 32 bit アプリケーションであり、数値は精度の低い型 ( long 型 = 32 ビットの符号付整数、浮動小数点数は float 型 ) が優先的に利用されています。

nlohmann/json では浮動小数点数や科学的記数法を用いた場合、デフォルトで数値は常に double ( 64 ビット ) で保存されています。


型変換について

CF25 の数値仕様と制限について

CF25 と nlohmann/json は数値の表現可能範囲にギャップがあり、型変換による丸め誤差の影響を受けずに正確な値を受け渡しするためには、数値を文字列に変換するのが唯一の解決策です。

例えば float 型は 7 桁まで表現可能です。しかし整数部と小数点数部を合計し 7 桁なので、CF25 で扱うことのできる実際の表現範囲は double に比べてかなり精度の低いものになります。

CF25 の long int 型 ( 32ビット整数型 ) の上限は 2,147,483,647 == -2,147,483,648 ~ 2,147,483,647 の範囲 であることを確認済みです。


Parameter

事前に JSON が以下データ内容でメモリ上に展開されているという前提で JSON Pointer を指定します。

{
    "test":12345,
    "array":[
        555,
        666,
        193
    ]
}

JSON はキー名と値がペアになっていて、キー名 “test” から 12345 という数値を得る場合、以下のように JSON Pointer を記述します。

"/test"
ExNum( "ASTER", "/test" )

キー名が「array」 の JSON 配列から配列要素を指定して、数値 193 を取り出す場合、以下のように JSON Pointer を指定します。

ExNum( "ASTER", "/array/2" )

Flatten Dump は階層構造を平坦化することができ、デバッグ用途では役に立ちます。

{
    "/test":12345,
    "/array/0":555,
    "/array/1":666,
    "/array/2":193,
}