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を参照してください。