JSON+;Java字符解码

JSON+;Java字符解码,java,json,encoding,Java,Json,Encoding,我下面的代码使用Java的URLConnection ping一个RESTful API,该API将返回一个JSON字符串。我得到的JSON字符串看起来完全有效,但在JSONLint和下面的最后一行代码中都失败了 返回的JSON是: {“rowId”:“1-12C-1494”} 错误消息是: 第2行的分析错误: …rowId:“1-12C-1494” -----------------------^ 应为“}”,”:“,”,“,”,“]' 代码是: StringBuilder responseB

我下面的代码使用Java的URLConnection ping一个RESTful API,该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中,它会很好地进行验证。我能告诉你的是某种字符/空白编码问题。有没有其他人遇到过它并有任何指导?谢谢!

好的,所以这与我如何从流到字符串有关。上面示例中的方法是在JSON的中间有一个1000字节的空白。JSONLT把它当作空白字符,它不能解释甚至渲染。

故事的寓意…不要使用我从InputStream到String的方法。这样效果更好:

InputStream cin = connection.getInputStream();

java.util.Scanner s = new java.util.Scanner(cin).useDelimiter("\\A");
(StringBuilder)responseBuilder.append(s.hasNext() ? s.next() : "");
请参阅以进行讨论