VARCHAR2やCLOBなどの文字列型を明示的にJSON型に変換するには、CAST 式を使用します。例:
obclient> SELECT CAST('{"a":1}' AS JSON) FROM DUAL;
+-----------------------+
| CAST('{"A":1}'ASJSON) |
+-----------------------+
| {"a":1} |
+-----------------------+
1 row in set
obclient> SELECT CAST('{}' AS JSON) FROM DUAL;
+------------------+
| CAST('{}'ASJSON) |
+------------------+
| {} |
+------------------+
1 row in set
obclient> SELECT CAST('[1, 2, 3]' AS JSON) FROM DUAL;
+-----------------------+
| CAST('[1,2,3]'ASJSON) |
+-----------------------+
| [1,2,3] |
+-----------------------+
1 row in set
文字列型をJSON文字列として使用する場合は、TREAT 式を使用できますが、この式はJSON構文を検証せず、戻り値も文字列でありJSON型ではありません。そのため、JSON機能を十分に活用できないため、使用は推奨されず、Oracleの過去の動作との互換性のためにのみ使用されます。例:
obclient> SELECT TREAT('{"a":1}' AS JSON) FROM DUAL;
+------------------------+
| TREAT('{"A":1}'ASJSON) |
+------------------------+
| {"a": 1} |
+------------------------+
1 row in set
obclient> SELECT TREAT('{}' AS JSON) FROM DUAL;
+-------------------+
| TREAT('{}'ASJSON) |
+-------------------+
| {} |
+-------------------+
1 row in set
暗黙的変換ルール
JSON型とVARCHAR2、CLOB、BLOB型の間には暗黙的な変換が存在し、VARCHAR2、CLOB、BLOBで表されるJSONは、Textual JSONまたはSerialised JSON、すなわちJSONテキストと呼ばれます。注意が必要な点として、BLOBを使用してJSONを格納する場合、それはJSONバイナリを格納していることを意味するわけではありません。
VARCHAR2、CLOB、BLOB型をJSON列に書き込むと、JSON型に暗黙的に変換されます。- JSON型を
VARCHAR2、CLOB、BLOB列に書き込むと、対応するデータ型に暗黙的に変換され、OSONからTextual JSONへ変換されます。
他のデータ型はJSON型に暗黙的に変換されません。
明示的変換ルール
- テキスト型はJSONコンストラクタを使用してJSON型に変換できます。
- JSONは
JSON_VALUE関数を使用して戻り値の型を指定するか、dot notation.item_method()を使用して他の型に変換できます。