0

我下面的代码是使用 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 中,它验证就好了。我能说的最好的就是某种字符/空格编码问题。有没有其他人遇到过它并有任何指导?谢谢!

4

1 回答 1

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() : "");

参阅将 InputStream 读取/转换为字符串以进行讨论

于 2013-01-25T22:24:28.883 回答