JSONデータ型

JSONは、人間が判読可能なデータの交換のために設計された、軽量なテキストベースのオープン・スタンダードです。これは、読み書きが簡単で、言語に依存しません。JSONテキストは、名前/値という形式で表されたデータです。有効なJSONテキストには、中カッコで囲まれたオブジェクトが含まれており、名前/値ペアのカンマ区切りリストが含まれています。各名前の後に':'(コロン)文字が続きます。JSONデータは、JSONオブジェクトを指定することで、JSONデータ列に書き込まれます。

表2-4 JSONデータ型

データ型 説明
JSON JSON型は、有効なすべてのJSON値(数値、文字列、配列(JSON)、マップ(JSON)およびJSON null)を表します。具体的には、JSONのインスタンスは次のいずれかになります
  1. ANYJSONATOMICのインスタンス
  2. 要素がすべてJSONのインスタンスである配列
  3. フィールド値がすべてJSONのインスタンスであるマップ。

{ "city" : "Santa Cruz", "zip" : 95008, "phones" : [ { "area" : 408, "number" : 4538955, "kind" : "work" }, { "area" : 831, "number" : 7533341, "kind" : "home" } ] }

"Santa Cruz"

95008

true

[ 12, "foo", { "city":"Santa Cruz"}, [2, 3]]

JSONデータを表にロードするために、Oracle NoSQL Databaseでは、JSONテキストを取り込むためのプログラム的なAPIが用意されています。サポートされているNoSQL SDKでは、この処理方法が異なります。Oracle NoSQL Databaseでは、入力JSONテキストが内部的に解析され、その構成要素が次のように型にマップされます。
  • 数値は、その数値の実際の値に応じて、integer、longまたはdoubleの項目に変換されます(float項目はJSONでは使用されません)。
  • 入力テキスト内の文字列は文字列項目にマップされます。
  • ブール値はブール項目にマップされます。
  • null値は、入力の指定方法によっては、JSON nullにマップされます。たとえば、入力テキストを"myvalue" : nullとして指定した場合、これはJSON nullとしてマップされます。ところが、"myvalue" : "null"を指定した場合は、その文字列値がテキスト"null"に設定されます。
  • 入力テキスト内で配列が検出された場合は、Array(JSON)型の配列項目が作成されます。この処理は、配列の実際の内容に関係なく、無条件に行われます。
  • 入力テキスト内でJSONオブジェクトが検出されると、Map(JSON)型のマップ項目が無条件で作成されます。
一般に、この解析の結果は、マップ、配列およびアトミック値のツリーです。永続記憶域の場合、ツリーはバイナリ形式にシリアライズされます。

ノート:

JSONにはTIMESTAMPデータ型に相当する型がないため、入力テキストにTIMESTAMP形式の文字列が含まれている場合、その文字列は文字列項目としてJSON列に格納されます。

JSONデータは、JSON型のフィールドで表の様々な行にある様々な種類の値を保持できるという意味で、スキーマレスです。たとえば、infoがJSON型のトップレベルの表列である場合、infoの値は、ある行ではinteger、別の行ではdoubleとstringが混在した配列、3行目では他のマップ、配列およびアトミック値が混在したマップである可能性があります。さらに、JSON列またはフィールドに格納されているデータは、有効なJSONインスタンスを引き続き生成するどのような方法ででも更新できます。その結果、各JSONツリー(メイン・メモリー内のもの、またはディスク上のシリアライズされたバイト配列として)は、その内容に関して自己記述的です。