【问题标题】:Using datastax driver, how can I read a non-primitive column as a JSON string?使用 datastax 驱动程序,如何将非原始列读取为 JSON 字符串?
【发布时间】:2017-08-16 10:17:06
【问题描述】:

我的 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 添加编解码器。

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 而无需显式干预编解码器和所有内容?

【问题讨论】:

    标签: cassandra datastax datastax-java-driver


    【解决方案1】:

    使用 toJson 方法

    从 Apache Cassandra™ 2.2 版开始,toJson 方法返回对象的 json 表示形式。

    例子:

    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_reportstoJson(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"}
    

    【讨论】:

    • 感谢 Ashraful,这很有帮助。知道我们是否也可以通过 datastax 驱动程序做到这一点?我问是因为我们必须运行“Select *”查询并且不能在该查询中添加 toJson() 方法。
    • 你可以使用 select json * from users;
    • 太棒了!非常感谢!
    猜你喜欢
    • 2016-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-03
    • 2015-11-19
    • 1970-01-01
    • 2014-03-31
    • 1970-01-01
    相关资源
    最近更新 更多