当前位置: 代码迷 >> Java Web开发 >> Gson MalformedJsonException,该怎么解决
  详细解决方案

Gson MalformedJsonException,该怎么解决

热度:1834   发布时间:2016-04-13 22:11:58.0
Gson MalformedJsonException
首先,非常感谢您能花时间在这个问题上。我已经搜索了很长时间,查看了很多类似问题。还是没有解决。
背景:
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 试试呢。有可能是gson 的bug 。

编码转换试一试呢。

其次如果是实体的话,你循环测试全部一样的实体,然后足够的大到1005741 再试试。


fastjson对特定字符无法转换,我之前遇到过一次,对于某些html标签作为json的value的时候,转换就会失败