com.google.gson.JsonSyntaxException:com.google.gson.stream.MalformedJsonException:Unterminated objec

来源:互联网 发布:重庆锐理数据 编辑:程序博客网 时间:2024/06/05 16:26

最近做项目调用接口返回比较复杂的json数据,在解析的时候一直报这样的错,sonSyntaxException:com.google.gson.stream.MalformedJsonException:Unterminated objec at line 1 column 423 path ....   把接收的json打印出来也是完整的。

到处查资料搞了好久,偶然机会看到关于编码问题,原来tomcat默认是ISO-8859-1,读取的接口数据中文乱码,修改InputStreamReader编码格式解决问题。

两种解决方法:

方法一,设置tomcat字符编码为utf-8,这种方法缺点很大,要是哪天重装了tomcat又忘了设置了,那就大大的bug了~所以我直接跳过,

方法二,代码中进行编码转换,我使用的是BufferedReader,中间加一个InputStreamReader进行编码转换,这下总不会乱码了吧!呵呵,上代码:

public   SajIot getHttpResponse(String allConfigUrl) {
        BufferedReader in = null;
        StringBuffer result = null;
        try {
            URI uri = new URI(allConfigUrl);
            URL url = uri.toURL();
            URLConnection connection = url.openConnection();
            connection.setRequestProperty("Content-Type",
            "application/x-www-form-urlencoded");
            connection.setRequestProperty("Charset", "utf-8");
            connection.connect();
            System.out.println("url地址是:"+url.toString());
            result = new StringBuffer();
            in = new BufferedReader(new InputStreamReader(    // 读取URL的响应
                    connection.getInputStream(),"utf-8"));
            String line;
            while ((line = in.readLine()) != null) {
                result.append(line);
            }
            String json=result.toString();
            Gson gson = new Gson();
            JsonBean jsonBean = gson.fromJson(json, JsonBean.class);
            List<UserInfoVos> userInfoVo=jsonBean.getUserInfoVos();

               for(int i=0;i<userInfoVo.size();i++){
                UserInfoVo infoVo=userInfoVo.get(i).getUserInfoVo();
                if(infoVo.getPackageCode()=="prod.10086000002301"){
                String packageCode= infoVo.getPackageCode();
                String packageName= infoVo.getPackageName();

             }

    }

    } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (in != null) {
                    in.close();
                }
            } catch (Exception e2) {
                e2.printStackTrace();
            }
        }
            
        return sajIot;

}

0 0
原创粉丝点击