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)