我已经成功编写了代码,使用 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 ;除非位于对象或数组内,否则不能使用逗号。
但是,如果你添加 beginArray
和 endArray
,你的代码将变成这样:
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/