如何将SQL结果写入JSON
问题描述:
我已成功编写了使用Google GSON将JSON中第一条SQL结果集记录写入的代码。如何将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();
我该如何解决这个问题?
答
您的代码将生成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 ,并且会解决你的问题。
use writer.beginArray()FYR http://developer.android.com/reference/android/util/JsonWriter.html –