TO_JSON¶
VARIANT 値を、値の JSON 表現を含む文字列に変換します。入力が NULLの場合、結果 もNULLです。
構文¶
TO_JSON( <expr> )
引数¶
式
有効な JSON 情報を保持するVARIANT 型の式です。
使用上の注意¶
JSON オブジェクト(別名「辞書」または「ハッシュ」)は、キーと値のペアの 順序付けられていない セットです。
TO_JSON
が文字列を生成する場合、その文字列内のキーと値のペアの順序は予測できません。TO_JSON
およびPARSE_JSON
は(ほぼ)逆または相反する関数です。PARSE_JSON
関数は入力として文字列を取り、 JSON互換のバリアントを返します。TO_JSON
関数は JSON互換バリアントを受け取り、文字列を返します。Xが有効な JSON を含む文字列である場合、次は(概念的に)trueです。X = TO_JSON(PARSE_JSON(X));
例えば、次は(概念的に)trueです。
'{"pi":3.14,"e":2.71}' = TO_JSON(PARSE_JSON('{"pi":3.14,"e":2.71}'))
ただし、関数は次の2つの理由で完全に相反しません。
TO_JSON
によって生成される文字列内のキーと値のペアの順序は予測できません。TO_JSON
によって生成された文字列には、PARSE_JSON
に渡される文字列よりも少ない空白を含めることができます。
次は同等の JSONですが、同等の文字列ではありません。
{"pi":3.14、「e」:2.71}
{"e":2.71,"pi":3.14}
例¶
これは TO_JSON
と PARSE_JSON
の短い例です。
CREATE TABLE jdemo1 (v VARIANT); INSERT INTO jdemo1 SELECT PARSE_JSON('{"food":"bard"}');SELECT v, v:food, TO_JSON(v) FROM jdemo1;出力:
+------------------+--------+-----------------+ | V | V:FOOD | TO_JSON(V) | |------------------+--------+-----------------| | { | "bard" | {"food":"bard"} | | "food": "bard" | | | | } | | | +------------------+--------+-----------------+
次の例は、 PARSE_JSON
、 TO_JSON
、 TO_VARIANT
の関係を示しています。
テーブルを作成し、 VARCHAR、汎用 VARIANT、 JSON互換の VARIANT データを追加します。
CREATE or replace TABLE jdemo2 (varchar1 VARCHAR, variant1 VARIANT, variant2 VARIANT); -- Add a VARCHAR value. INSERT INTO jdemo2 (varchar1) VALUES ('{"PI":3.14}'); -- Generate a JSON value that corresponds to the VARCHAR. UPDATE jdemo2 SET variant1 = PARSE_JSON(varchar1);このクエリは、
TO_JSON
とPARSE_JSON
が実質的に相互関数であることを示しています(空白の違いがない場合)。SELECT varchar1, PARSE_JSON(varchar1), variant1, TO_JSON(variant1), PARSE_JSON(varchar1) = variant1, TO_JSON(variant1) = varchar1 FROM jdemo2;出力:
+-------------+----------------------+--------------+-------------------+---------------------------------+------------------------------+ | VARCHAR1 | PARSE_JSON(VARCHAR1) | VARIANT1 | TO_JSON(VARIANT1) | PARSE_JSON(VARCHAR1) = VARIANT1 | TO_JSON(VARIANT1) = VARCHAR1 | |-------------+----------------------+--------------+-------------------+---------------------------------+------------------------------| | {"PI":3.14} | { | { | {"PI":3.14} | True | True | | | "PI": 3.14 | "PI": 3.14 | | | | | | } | } | | | | +-------------+----------------------+--------------+-------------------+---------------------------------+------------------------------+
PARSE_JSON
とTO_VARIANT
はどちらも文字列を取り、バリアントを返すことができますが、同等ではありません。次のコードは、PARSE_JSON
を使用して1つの列を更新し、TO_VARIANT
を使用して他の列を更新します(列バリアント1の更新は、同じ関数呼び出しを使用して以前に更新されたため不要です。ただし、列を更新するために呼び出される関数を並べて確認できるように、以下のコードで再度更新します)。UPDATE jdemo2 SET variant1 = PARSE_JSON(varchar1), variant2 = TO_VARIANT(varchar1); SELECT variant1, variant2, variant1 = variant2 FROM jdemo2;この出力は、parse_json()の出力とto_variant()の出力が同じではないことを示しています。空白の些細な違いに加えて、引用符にはさらに大きな違いがあります。
+--------------+-----------------+---------------------+ | VARIANT1 | VARIANT2 | VARIANT1 = VARIANT2 | |--------------+-----------------+---------------------| | { | "{\"PI\":3.14}" | False | | "PI": 3.14 | | | | } | | | +--------------+-----------------+---------------------+