如何将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(); 

我该如何解决这个问题?

+0

use writer.beginArray()FYR http://developer.android.com/reference/android/util/JsonWriter.html –

您的代码将生成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 ,并且会解决你的问题。