Java API for JSON の主な概念

変更の開始JSONは、 JavaScript Object Notationの略で、 JavaScript のオブジェクトリテラル記法をベースにした軽量なデータ交換フォーマットです。 JSON は、プログラミング言語に依存しないものの、さまざまな言語の規則を使用する。 Java™ APIは、 MongoDB クエリ言語から派生したJSON指向のクエリ言語をサポートしています。 変更の終わり

ヒント: Db2 for z/OS® における JSON データ処理のための推奨されるアプローチは、もはや Java API ではありません。 最良の結果を得るには、代わりに Db2 for z/OS に付属するSQLと組み込み関数を使用してください。 詳細については、「SQL を使用した JSON ドキュメントの操作 」を参照してください。

JSONデータストアとは、JSON形式のデータを保存、処理、管理する機能を提供するデータベースです。 Db2 のJSON機能により、 Db2 データベースをJSONデータストアとして使用できるようになります。 データストア内のJSONドキュメントは、拡張BSONというバイナリ形式で保存されます。

JSON ネーム・スペース

各 JSON データ・ストアでは、複数の JSON 名前空間をサポートできます。 JSON 名前空間は、概念的には MongoDB データベースと同様であり、SQL スキーマとして表されます。 名前空間は、デフォルトでは、大/小文字の区別はありません。

コマンド行インターフェースでは、ネーム・スペースは use コマンドで設定され、コマンド接頭部 db で参照されます。

以下は、JSON ネーム・スペースを表すコード・サンプルです。
nosql>use media
Switched to schema MEDIA
nosql>db.getCollectionNames()
[movies, books, audio]

JSON コレクション

JSON コレクションは、JSON ドキュメントの名前付きグループです。 コレクション内のドキュメント構造は、それぞれ大幅に異なる場合があります。 しかし、コレクション内のドキュメントは、通常、性質が類似しているため、データの検索およびグループ化が可能になります。

コレクションは、カスタム定義または自動的に生成された固有 ID と、半構造ドキュメント・コンテンツを保持するバイナリー・ラージ・オブジェクトとともに、 Db2 テーブルに表示されます。 コレクションは、createCollection() コマンドを使用して明示的に作成できます。 コレクションは、以前には存在しなかったコレクションに対して挿入が試行されると、暗黙的に作成されます。

主キーとなるドキュメント ID は、コレクション内のすべてのドキュメントについて同じデータ・タイプでなければなりません。

JSON ドキュメント

JSON ドキュメントは、名前と値の組のオブジェクトであるフィールドから構成されます。 フィールドは任意の順序にすることも、ネストすることも、配列に配置することもできます。

ドキュメント構造に制約はありません。 したがって、同じコレクション内の他のドキュメントが、フィールドのサブセット、追加のフィールド、または同じフィールドの異なる表現を持つ可能性があります。

キー、すなわち、フィールド名は、常にストリング・データで、かつ固有でなければなりません。 値はサポートされるいずれかの JSON データ・タイプにすることができます。
表 1. JSON データ・タイプ
データ・タイプ JSON フォーマットでの例
java.lang.String "文字列"
java.lang.Integer 3
java.lang.Long 4294967296
java.lang.Double 6.2
java.lang.Byte [] true / false
java.util.Date (millisecond precision, in UTC) { "$binary": "(base64-encoded value)", "$type": "0" }
java.util.regex.Pattern { "$date" : "1998-03-11T17:14:12.456Z" }
java.util.regex.Pattern { "$regex" : "ab*" , "$options" : "" }
java.util.UUID { "$uuid" : "fb46f9a6-13df-41a2-a4e3-c77e85e747dd" }
com.ibm.nosql.bson.types.ObjectId { "$oid" : "51d2f200eefac17ea91d6831" }
com.ibm.nosql.bson.types.Code { "$code" : "mycode" }
com.ibm.nosql.bson.types.CodeWScope { "$code" : "i=i+1", "$scope" : {} }
com.ibm.nosql.json.api.BasicDBObject { "a" : 1, "b": { "c" : 2 } }
com.ibm.nosql.json.api.BasicDBList [1 , 2, "3", "abc", 5]

Date 文字列値の場合、クライアントは値をUTCに変換して Db2 データベースに保存します。 これは、UTC フォーマットの Date としても取得されます。

以下の例に、サンプル JSON ドキュメントを示します。

{
	name:"Joe",
	age:25,
	phone:["555-666-7777", "444-789-1234"],
	homeAddress:
		{street:"Sycamore Avenue",
		city: “Gilroy”,
		zipcode:"95046"
		}
	businessAddress:
		{
		street:"Bailey Avenue",
		City: “San Jose”,
		zipcode:"95141"
		}
}

JSON のネストされたオブジェクト

JSON オブジェクトを他の JSON オブジェクトの内部にネストすることができます。 ネストされたオブジェクトには、それぞれ固有のアクセス・パスが必要です。

同じドキュメント内のネストされたオブジェクト内には、同じフィールド名が出現する可能性があります。 ただし、フルアクセス名は固有にする必要があります。

ネストされたフィールドにアクセスするには、ピリオドで区切られたフィールド名を連結します。 (ドット)。 例えば、以下のドキュメントの作成者の姓にアクセスするには、次のように author.lastname を使用します。

{"isbn": "123-456-222",  
 "author": 
    {
      "lastname": "Doe",
      "firstname": "Jane"
    },
"editor": 
    {
      "lastname": "Smith",
      "firstname": "Jane"
    },
  "title": "The Ultimate Database Study Guide",  
  "category": ["Non-Fiction", "Technology"]
 }

この例では、フィールド名 lastnameauthor および editor オブジェクトに出現します。 author.lastname および editor.lastname 内の接頭部によって、固有のアクセスが可能になります。