使用 Java API 以 JSON 格式获取所有 Cassandra 查询结果
Get all Cassandra query result in JSON format Using Java API
在 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 类型——其他一切都被视为字符串。但是理解一个idea就够了。
在 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 类型——其他一切都被视为字符串。但是理解一个idea就够了。