gpt4 book ai didi

json - 如何将应用程序/json 对象解析为字符串

转载 作者:行者123 更新时间:2023-12-05 00:36:26 37 4
gpt4 key购买 nike

我以编程方式导航到一个返回 application/json 格式的站点。我似乎无法读取 HttpURLConnection 中返回的 json。我正在使用 Jackson 将 JSON 分解为 java 对象。代码是:

InputStreamReader isr = new InputStreamReader(connection.getInputStream());
BufferedReader br = new BufferedReader(isr);
StringBuilder sb = new StringBuilder();
String line = br.readLine();
while (line != null) {
sb.append(line);
line = br.readLine();
}
geoLocation = (new ObjectMapper()).readValue(sb.toString(), GeoLocation.class);

当我打印 sb.toString() 时,我会得到看起来很有趣的字符和 unicode。我应该得到一个格式良好的字符串。由此产生的异常是:
org.codehaus.jackson.JsonParseException: Illegal character ((CTRL-CHAR, code 31)): only regular white space (\r, \n, \t) is allowed between tokens
at [Source: sun.net.www.protocol.http.HttpURLConnection$HttpInputStream@3f6dadf9; line: 1, column: 2]
at org.codehaus.jackson.JsonParser._constructError(JsonParser.java:1291)
at org.codehaus.jackson.impl.JsonParserMinimalBase._reportError(JsonParserMinimalBase.java:385)

例如,如果我的网址是:
http://api.ipinfodb.com/v3/ip-city/?key=<mykeyhere>&ip=38.111.145.101&format=xml

我在浏览器窗口中得到以下信息:
<?xml version="1.0" encoding="UTF-8"?>
<Response>
<statusCode>OK</statusCode>
<statusMessage></statusMessage>
<ipAddress>38.111.145.101</ipAddress>
<countryCode>US</countryCode>
<countryName>UNITED STATES</countryName>
<regionName>CALIFORNIA</regionName>
<cityName>OAKLAND</cityName>
<zipCode>94601</zipCode>
<latitude>37.7993</latitude>
<longitude>-122.24</longitude>
<timeZone>-08:00</timeZone>
</Response>

但是当我这样做时
http://api.ipinfodb.com/v3/ip-city/?key=<mykeyhere>&ip=38.111.145.101&format=json

它提示我下载一个文件。下载后打开文件后,它包含:
{
"statusCode" : "OK",
"statusMessage" : "",
"ipAddress" : "38.111.145.101",
"countryCode" : "US",
"countryName" : "UNITED STATES",
"regionName" : "CALIFORNIA",
"cityName" : "OAKLAND",
"zipCode" : "94601",
"latitude" : "37.7993",
"longitude" : "-122.24",
"timeZone" : "-08:00"
}

我也尝试将输入流直接传递给 jackson,但它以相同的结果失败。
geoLocation = (new ObjectMapper()).readValue(urlConn.getInputStream(), GeoLocation.class);

知道如何以可查看的字符串格式从 URLConn 检索 JSON,以便将其传递给 Jacson?

谢谢

最佳答案

默认情况下,HttpURLConnection将编码设置为 gzip .一旦我禁用它,我就能够从流中读取字符串:

urlConn.setRequestProperty("Accept-Encoding", "identity");

关于json - 如何将应用程序/json 对象解析为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8091524/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com