Gson MalformedJsonException

chanryma 2015-11-05 09:25:35
首先,非常感谢您能花时间在这个问题上。我已经搜索了很长时间,查看了很多类似问题。还是没有解决。
背景:
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中运行是正常的?
其他原因?
。。。

再次感谢您的时间!
...全文
345 点赞 收藏 10
写回复
10 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
chanryma 2015-11-07
引用 5 楼 shijing266 的回复:
[quote=引用 4 楼 chanryma 的回复:] @shijing266 没有乱码。我之前请求用的是URLConnection connection = realUrl.openConnection(); 换成了apach的DefaulHttpClient。
你的意思是换个请求方式,返回参数不变,还是json格式,但是解析可以通过了?[/quote] 是的。只是客户端这边改了一下请求的方式和解析的方式。 不好意思的是,我再用之前的请求方式去重现、做个总结的时候,之前的也工作正常了。这让我很郁闷。 我之前发请求的方式用的是这个连接下的: http://www.cnblogs.com/zhuawang/archive/2012/12/08/2809380.html 只是把sendGet方法里将参数拼到url里的过程做了个如下判断:
            if (!StringUtils.isEmptyOrWhitespaceOnly(param)) {
                url = url + "?" + param;
            }
在这里一起感谢各位为我花费的时间。
回复
换种请求方式? 哪种? 你出问题的地方,json数据是不是出现乱码了
回复
chanryma 2015-11-06
换了种请求的方式。正常了。稍后详细描述一下。 不过还是解释不了为什么之前的方式在Eclipse中直接运行可以,打到jar里就不行。
回复
引用 8 楼 rui888 的回复:
先转码后面再转回来。 fastjson 效率很高。
就是我拿到的json数据也够大的,然后logger输出直接变"?"号了, 但是直接用json工具格式化,就能清楚的辨别开来,显示正常 就是直接用fastjson转就出错了,其他转换都正常,出现这种带html标签就有问题
回复
兔子托尼啊 2015-11-06
引用 7 楼 shijing266 的回复:
先转码后面再转回来。 fastjson 效率很高。
回复
引用 6 楼 rui888 的回复:
fastjson 试试呢。有可能是gson 的bug 。 编码转换试一试呢。 其次如果是实体的话,你循环测试全部一样的实体,然后足够的大到1005741 再试试。
fastjson对特定字符无法转换,我之前遇到过一次,对于某些html标签作为json的value的时候,转换就会失败
回复
兔子托尼啊 2015-11-06
fastjson 试试呢。有可能是gson 的bug 。 编码转换试一试呢。 其次如果是实体的话,你循环测试全部一样的实体,然后足够的大到1005741 再试试。
回复
引用 4 楼 chanryma 的回复:
@shijing266 没有乱码。我之前请求用的是URLConnection connection = realUrl.openConnection(); 换成了apach的DefaulHttpClient。
你的意思是换个请求方式,返回参数不变,还是json格式,但是解析可以通过了?
回复
chanryma 2015-11-06
@shijing266 没有乱码。我之前请求用的是URLConnection connection = realUrl.openConnection(); 换成了apach的DefaulHttpClient。
回复
chanryma 2015-11-05
参考过的帖子: http://m.blog.csdn.net/blog/Aaren_Jiang/12849777 http://cache.baiducontent.com/c?m=9f65cb4a8c8507ed4fece76310579135480ddd276b97844b22918448e435061e5a25a4ec66644b598f8461640ba54957ecfa376f665067f6cc9e9f4aabebd93f2ffe76692f0b8637478e44fa951132c156c51bb4f30ee7ccb174d3f9818cc8542595005b2eddb0d40d564c8b32ac437bb2f1db0e4e024caea86d25a9562268c27f57b636a7bd6e3b1081879c1a0c9876857611e6f066ee6a4ff54cf349436519fc1bfb59462740b70d61e8454d5fcfb7&p=8b2a971e948259eb08e2947d07578b&newp=9f57c64ad4db18fa08e2947d075e8e231610db2151d7da0d2681&user=baidu&fm=sc&query=gson+long+string+MalformedJsonException+site%3Astackoverflow%2Ecom&qid=895b7da800000ba9&p1=5 http://cache.baiducontent.com/c?m=9f65cb4a8c8507ed4fece76310579135480ddd276b97844b22918448e435061e5a25a4ec66644b598f84616703aa4c56ecfb336f62427deb8cc8fe0c87fbcf6d6e9f27422f4fd8154f9346f89d1e649c7cc710b8f85ba1e1ad6e84aea480830244ca25583cdaa7cb4d00629d25a14373a5fdc414544b55e7ad666aaa182a75882331e81aa5b5256e76c0b09d0710963dd0104ec4f161ed7e4de245fc5e467813ea1da609217172a658268f1f6058&p=8d66e75f8a904ead4ebd9b7e0e1d94&newp=81769a4784934eaf5be6c9624d5497231610db2151d2db47&user=baidu&fm=sc&query=gson+long+string+MalformedJsonException+site%3Astackoverflow%2Ecom&qid=895b7da800000ba9&p1=1 http://www.itstrike.cn/Question/7566af9d-eb87-4ade-b64c-2ab8333599e8.html
回复
相关推荐
发帖
Web 开发
创建于2007-09-28

8.0w+

社区成员

Java Web 开发
申请成为版主
帖子事件
创建了帖子
2015-11-05 09:25
社区公告
暂无公告