JSON + Java字符解码

时间:2013-01-25 22:01:17

标签: java json encoding

下面的代码使用Java的URLConnection来ping RESTful API,它将返回一个JSON字符串。我得到的JSON字符串似乎完全有效,但在JSONLint和下面的最后一行代码中都失败了。

返回的JSON是:

  

{“rowId”:“1-12C-1494”}

错误消息是:

  

第2行的解析错误:   ... rowId“:”1-12C-1494“   ----------------------- ^   期待'}',':',',',']'

代码是:

StringBuilder responseBuilder = new StringBuilder();

URLConnection connection = url.openConnection();
InputStream cin = connection.getInputStream();
int bytesRead = -1;
byte[] buffer = new byte[1024];

while ((bytesRead = cin.read(buffer)) >= 0) {
    responseBuilder.append(new String(buffer, "UTF-8"));
}

String response = responseBuilder.toString();

JsonObject jsonObject = new JsonParser().parse(response).getAsJsonObject();

如果我从浏览器ping RESTful API并将JSON复制到JSONLint,它就可以正常验证。我能说出最好的一些字符/空格编码问题。有没有其他人遇到它并有任何指导?谢谢!

1 个答案:

答案 0 :(得分:1)

好的,这与我从Stream到String的方式有关。上例中的方法在JSON中间留下了大约1000字节的间隙。 JSONLint将其视为无法解释甚至呈现的空白字符。

故事的道德......不要使用我所做的方法从InputStream转到String。这样做效果更好:

InputStream cin = connection.getInputStream();

java.util.Scanner s = new java.util.Scanner(cin).useDelimiter("\\A");
(StringBuilder)responseBuilder.append(s.hasNext() ? s.next() : "");

请参阅Read/convert an InputStream to a String进行讨论