下面的代码使用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,它就可以正常验证。我能说出最好的一些字符/空格编码问题。有没有其他人遇到它并有任何指导?谢谢!
答案 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() : "");