使用 datastax 驱动程序,如何将非原始列读取为 JSON 字符串?
Using datastax driver, how can I read a non-primitive column as a JSON string?
我的 cassandra 表中有几个非原始列。
其中一些是用户定义类型的 UDT。
在通过 datastax 驱动程序查询它们时,我想将此类 UDT 转换为 JSON 值。
更具体地说,我想为下面的值对象获取 JSON 字符串:
Row row = itr.next();
ColumnDefinitions cds = row.getColumnDefinitions();
cds.asList().forEach((ColumnDefinitions.Definition cd) -> {
String name = cd.getName();
Object value = row.getObject(name);
}
我已经过了http://docs.datastax.com/en/developer/java-driver/3.1/manual/custom_codecs/
但我不想为我拥有的每个 UDT 添加编解码器。
看着,我也试过这个:
row.getString(name)
但是它给我一个错误:Codec not found for requested operation: [set<date> <-> java.lang.String]
驱动程序能否以某种方式 return 我直接 JSON 而无需明确干预编解码器和所有内容?
使用toJson方法
Starting with version 2.2 of Apache Cassandra™, toJson method return json representation of an object.
示例:
CREATE TYPE fullname (
firstname text,
lastname text
);
CREATE TABLE users (
id uuid PRIMARY KEY,
direct_reports set<frozen<fullname>>,
name frozen<fullname>
);
现在您可以 select direct_reports 并命名为 json
SELECT id,toJson(direct_reports) as direct_reports,toJson(name) as name FROM users ;
这里我将 toJson(direct_reports)
重命名为 direct_reports
并将 toJson(name)
重命名为 name
这样你就可以使用 row.getString("direct_reports")
和 row.getString("name")
来获取direct_reports json 和姓名 json.
输出:
id | 62c36092-82a1-3a00-93d1-46196ee77204
direct_reports | [{"firstname": "Naoko", "lastname": "Murai"}, {"firstname": "Sompom", "lastname": "Peh"}]
name | {"firstname": "Marie-Claude", "lastname": "Josset"}
我的 cassandra 表中有几个非原始列。 其中一些是用户定义类型的 UDT。
在通过 datastax 驱动程序查询它们时,我想将此类 UDT 转换为 JSON 值。 更具体地说,我想为下面的值对象获取 JSON 字符串:
Row row = itr.next();
ColumnDefinitions cds = row.getColumnDefinitions();
cds.asList().forEach((ColumnDefinitions.Definition cd) -> {
String name = cd.getName();
Object value = row.getObject(name);
}
我已经过了http://docs.datastax.com/en/developer/java-driver/3.1/manual/custom_codecs/
但我不想为我拥有的每个 UDT 添加编解码器。
看着
row.getString(name)
但是它给我一个错误:Codec not found for requested operation: [set<date> <-> java.lang.String]
驱动程序能否以某种方式 return 我直接 JSON 而无需明确干预编解码器和所有内容?
使用toJson方法
Starting with version 2.2 of Apache Cassandra™, toJson method return json representation of an object.
示例:
CREATE TYPE fullname (
firstname text,
lastname text
);
CREATE TABLE users (
id uuid PRIMARY KEY,
direct_reports set<frozen<fullname>>,
name frozen<fullname>
);
现在您可以 select direct_reports 并命名为 json
SELECT id,toJson(direct_reports) as direct_reports,toJson(name) as name FROM users ;
这里我将 toJson(direct_reports)
重命名为 direct_reports
并将 toJson(name)
重命名为 name
这样你就可以使用 row.getString("direct_reports")
和 row.getString("name")
来获取direct_reports json 和姓名 json.
输出:
id | 62c36092-82a1-3a00-93d1-46196ee77204
direct_reports | [{"firstname": "Naoko", "lastname": "Murai"}, {"firstname": "Sompom", "lastname": "Peh"}]
name | {"firstname": "Marie-Claude", "lastname": "Josset"}