gpt4 book ai didi

java - 使用 Java API 以 JSON 格式获取所有 Cassandra 查询结果

转载 作者:行者123 更新时间:2023-11-30 02:15:35 25 4
gpt4 key购买 nike

cqlsh中使用查询select JSON * from table_name我可以获得JSON格式的结果。我想使用 Datastax Java API 执行相同的操作。

StringBuilder sb = new StringBuilder("SELECT json * FROM ").append("JavaTest.data");
String query = sb.toString();
ResultSet rs = session.execute(query);
List<Row> rows = rs.all();
String q1 = rows.toString();
System.out.println(q1);

但结果是:

[  
Row [
{
"id":1,
"time":"12",
"value":"SALAM"
}
],
Row [
{
"id":2,
"time":" 89",
"value":" BYE"
}
],
Row [
{
"id":3,
"time":" 897",
"value":" HelloWorld"
}
]
]

它的 JSON 格式不正确。我知道我可以获取一行的 JSON ,但这样,我应该使用循环来获取 JSON 格式的所有结果。在 JAVA API 文档中搜索我找不到任何解决方案!

最佳答案

您需要使用以下内容 - 只需按原样获取 JSON 字符串:

for (Row row : rs) {
String json = row.getString(0);
// ... do something with JSON string
}

如果你想将它们表示为对象列表,那么在迭代之前和之后添加方括号会更容易,并在 JSON 对象之间放置逗号,如下所示:

    ResultSet rs = session.execute("select json * from test.jtest ;");
int i = 0;
System.out.print("[");
for (Row row : rs) {
if (i > 0)
System.out.print(",");
i++;
String json = row.getString(0);
System.out.print(json);
}
System.out.println("]");

或者您可以为 ResultSet 编写自定义序列化程序,并将转换任务放入其中:

    ObjectMapper mapper = new ObjectMapper();
SimpleModule module = new SimpleModule();
module.addSerializer(ResultSet.class, new ResultSetSerializer());
mapper.registerModule(module);

rs = session.execute("select * from test.jtest ;");
String json = mapper.writeValueAsString(rs);
System.out.println("'" + json + "'");

这是一个更加复杂的任务(您需要正确处理集合、用户定义类型等),但您可能可以更好地控制序列化。

完整代码可在this gist获取。请注意,JSON 序列化程序仅处理 NULL、 boolean 值和 int 类型 - 其他所有类型都被视为字符串。但这足以理解一个想法。

关于java - 使用 Java API 以 JSON 格式获取所有 Cassandra 查询结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48578986/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com