首先,非常感谢您能花时间在这个问题上。我已经搜索了很长时间,查看了很多类似问题。还是没有解决。
背景:
1. 客户端发送Get请求从服务器获取数据
2. 服务器返回的json格式的数据。返回结果还是比较长的,共1005741个字符。
3. 我用的Gson报json转成对象。
正常情况:
我在Eclipse中,在一个main方法中去获取数据,再解析,是没问题的。都能够用我定义的类还原出来。我想这应该能说明我定义的类是没问题的。
异常情况:
当我把同样的代码打到一个jar里,再做同样的事情,就出现了如下的异常。
com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Unterminated object at line 1 column 667
at com.google.gson.Gson.fromJson(Gson.java:769)
at com.google.gson.Gson.fromJson(Gson.java:721)
at com.google.gson.Gson.fromJson(Gson.java:670)
at com.google.gson.Gson.fromJson(Gson.java:642)
异常中说的第一行,第667列。我用Notepad++定位到第667列,第667列是个冒号':',,"id":2019, 就是id和2019中间的冒号。
json太长了,没办法贴近来。请原谅。
下面是我发送请求数据的方法,返回结果就是整改json结构:
public static String sendGet(String url, String param) {
String result = "";
BufferedReader reader = null;
try {
if ((param != null) && (param.length() > 0)) {
url = url + "?" + param;
}
URL realUrl = new URL(url);
URLConnection connection = realUrl.openConnection();
setupConnection(connection);
connection.connect();
reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String line;
while ((line = reader.readLine()) != null) {
result += line;
}
} catch (Exception e) {
LogUtil.error(e);
} finally {
release(reader);
}
return result;
}
我也试过把BufferedReader换成Google的JsonReader。也报同样的异常,同样的位置。
服务返回的json有问题?但是为什么在Eclipse中运行就是正常的?
读取返回结果的方式有问题?同样,为什么Eclipse中运行是正常的?
json太长?同样,为什么Eclipse中运行是正常的?
其他原因?
。。。
再次感谢您的时间!
------解决思路----------------------
fastjson 试试呢。有可能是gson 的bug 。
编码转换试一试呢。
其次如果是实体的话,你循环测试全部一样的实体,然后足够的大到1005741 再试试。
------解决思路----------------------
fastjson对特定字符无法转换,我之前遇到过一次,对于某些html标签作为json的value的时候,转换就会失败