JSONの使用

JSONデータ型は、主キーまたはシャード・キーの一部として使用できません。

主キーがUIDで2番目のフィールドにJSONデータ・フィールドを持つシンプルな2つのフィールドの表を定義するには、次のDDL文を使用します。

CREATE TABLE myJsonTable (
    uid INTEGER,
    myJSON JSON,
    PRIMARY KEY (uid)
) 

このデータ型に対して書き込むデータは、文字列として格納された任意の有効なJSONにすることができます。たとえば、次のすべてが有効です。

final String jsonNumber = "2";
final String jsonString = "\"a json string\"";
final String jsonObject_null = "{}";
final String jsonObject = "{\"a\": 1.006, \"b\": null," +
            "\"bool\" : true, \"map\": {\"m1\": 5}," + 
            "\"ar\" : [1,2.7,3]}";
final String jsonNull = "null"; 

前述のように定義した表にJSON値を格納するには、次のようにします。

    TableAPI tableH = kvstore.getTableAPI();

    Table myJsonTable = tableH.getTable("myJsonTable");
    Row row = myTable.createRow();
    row.put("uid", 12345);
    String jsonArray="[1,5,11.1,88]";
    row.putJson("myJSON", jsonArray);
    tableH.put(row, null, null); 

取得するには、次のようにします。

    TableAPI tableH = kvstore.getTableAPI();

    Table myTable = tableH.getTable("myJsonTable");
    PrimaryKey pkey = myTable.createPrimaryKey();
    pkey.put("uid", 12345);

    Row row = tableH.get(pkey, null);
    int uid = row.get("uid").asInteger().get();
    String jsonStr = row.get("myJSON").toString();

    System.out.println("uid: " + uid + " JSON: " + jsonStr); 

Java Readerを使用して、I/Oの場所(ディスク上のファイルなど)からJSONデータをストリームできるRow.putJson()のバージョンが存在していることに注意してください。たとえば、ディスクから小さいファイルをストリームするには、java.io.FileReaderを使用します。

    TableAPI tableH = kvstore.getTableAPI();

    Table myTable = tableH.getTable("myJsonTable");

    Row row = myTable.createRow();
    row.put("uid", 666);

    try {
       FileReader fr = new FileReader("myJsonFile.txt");
       row.putJson("myJson", fr);
       tableH.put(row, null, null);
    } catch (FileNotFoundException fnfe) {
       System.out.println("File not found: " + fnfe);
    } 

JSONデータ・フィールドの使用例は、例によるJSONを参照してください。