JSONの使用
JSONデータ型はプレビュー機能として使用できます。
JSONデータ型は、主キーまたはシャード・キーの一部として使用できません。このリリースでは、索引に加えることもできません。
主キーがUIDで2番目のフィールドにJSONデータ・フィールドを持つシンプルな2つのフィールドの表を定義するには、次のDDL文を使用します。
CREATE TABLE myJsonTable (
uid INTEGER,
myJSON JSON,
PRIMARY KEY (uid)
)
このデータ型に対して書き込むデータは、文字列として格納された任意の有効なJSONにすることができます。たとえば、次のすべてが有効です。
jsonNumber = "2"
jsonString = "\"a json string\""
jsonObject_null = "{}"
jsonObject = '{"a": 1.006, "b": null, \
"bool" : true, "map": {"m1": 5}, \
"ar" : [1,2.7,3]}'
String jsonNull = "null"
前述のように定義した表にJSON値を格納するには、次のようにします。
row_d = {'uid' : 0,
'myJSON' : '[1,2.8,1001,322987]'
}
try:
store.put("myJsonTable", row_d)
logging.debug("Store write succeeded.")
except IllegalArgumentException, iae:
logging.error("Could not write table.")
logging.error(iae.message)
sys.exit(-1)
注意:
JSONオブジェクトを格納するには、ディクショナリとして記述します。次に例を示します。
row_d = {'uid' : 0,
'myJSON' : {"field_one" : "a name",
"field_two" : 10}}
その後、前述の例と同じ方法でストアに書き込むことができます。
取得するには、次のようにします。
def display_row(row):
try:
print "Retrieved row:"
print "\tuid: %s" % row['uid']
print "\tJSON: %s" % row['myJSON']
except KeyError, ke:
logging.error("Row display failed. Bad key: %s" % ke.message)
...
def read_store(store):
key_d = {}
try:
row_list = store.table_iterator("myJsonTable", key_d, False)
if not row_list:
logging.debug("Table retrieval failed")
else:
logging.debug("Table retrieval succeeded.")
for r in row_list:
display_row(r)
except IllegalArgumentException, iae:
logging.error("Table retrieval failed.")
logging.error(iae.message)