【问题标题】:How to write SQL result to JSON如何将 SQL 结果写入 JSON
【发布时间】:2015-05-06 00:21:25
【问题描述】:

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

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

JSON 必须只有一个顶级值

这是我的代码:

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();

我该如何解决这个问题?

【问题讨论】:

标签: java sql json gson writer


【解决方案1】:

您的代码将生成如下所示的 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,可以解决您的问题。

【讨论】:

    猜你喜欢
    • 2010-11-25
    • 2021-12-24
    • 2013-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多