使用 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"}