java - 如何将SQL结果写入JSON

标签 java sql json gson writer

我已经成功编写了代码,使用 Google GSON 将 SQL 结果集的第一条记录写入 JSON。

不幸的是,当结果集有超过 1 条记录时,它会抛出以下异常:

JSON must have only one top-level value

这是我的代码:

HttpServletResponse httpres = response;
httpres.setContentType("application/json; charset=UTF-8");
httpres.setCharacterEncoding("UTF-8");

JsonWriter writer = new JsonWriter(new OutputStreamWriter(
            httpres.getOutputStream(), "UTF-8"));

while (rs.next()) {
  writer.beginObject();
  // loop rs.getResultSetMetadata columns
  for (int idx = 1; idx <= rsmd.getColumnCount(); idx++) {
    writer.name(rsmd.getColumnLabel(idx)); // write key:value pairs
    writer.value(rs.getString(idx));
  }
  writer.endObject();
}

writer.close();
httpres.getOutputStream().flush();

如何解决这个问题?

最佳答案

您的代码将生成如下所示的 JSON:

{
   "foo":"bar"
},
{
   "foo":"baz"
},
{
   "foo":"quux"
}

但是,this is not valid JSON ;除非位于对象或数组内,否则不能使用逗号。

但是,如果你添加 beginArrayendArray,你的代码将变成这样:

writer.beginArray();
while(rs.next()) { 
  // snip... no changes to your code
}
writer.endArray();

这将使您的 JSON 看起来像这样:

[ 
  {
     "foo":"bar"
  },
  {
     "foo":"baz"
  },
  {
     "foo":"quux"
  }
]

哪个有效的 JSON,并且可以解决您的问题。

关于java - 如何将SQL结果写入JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30065413/

相关文章:

json - 如何从 Redis 的 ServiceStack 实现返回的 Json Datetime 格式转换为 .net Datetime?

java - Jython 打印所有终端输出/将输出分配为字符串

java - 多节点集群上的 hazelcast 条目监听器

sql - 远程连接到 DerbyDB

Javascript:无法将对象数组存储到 Firestore

php - 如何在 AngularJS 应用程序中使用 PHP/Mysql 生成的 json

java - 映射现实世界的城市并计算距离 Java

java - jsp中的考试类型问题

mysql - 选择找到条目 'x' 的 ID 和 COLUMN_NAME

mysql - 查找只有读取权限的用户