使用datastax驱动程序,我如何读取一个非原始列作为JSON字符串?
问题描述:
我在cassandra表中有几个非原始列。 其中一些是用户定义的类型UDT。使用datastax驱动程序,我如何读取一个非原始列作为JSON字符串?
在通过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我有。在Using Datastax Java Driver to query a row as a JSON
来看,我想这太:
row.getString(name)
但它给我一个错误:Codec not found for requested operation: [set<date> <-> java.lang.String]
可司机莫名其妙地回到我直接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>
);
现在您可以选择direct_reports并命名为JSON
SELECT id,toJson(direct_reports) as direct_reports,toJson(name) as name FROM users ;
在这里,我有改名toJson(direct_reports)
为direct_reports
和toJson(name)
as 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"}
谢谢Ashraful,这是有帮助的。任何想法,如果我们也可以通过datastax驱动程序来做到这一点?我问,因为我们**必须运行“选择*”查询,并且不能在该查询中添加toJson()方法。 – user2250246
你可以使用从用户选择json *; –
精湛!非常感谢! – user2250246