复杂json解析(json里面嵌套json)

         

    调用第三方接口,返回一堆json,我只想取得里面的某一个属性,但是返回的比较复杂,无法直接拿到属性,格式类似于这样:

{"video":{"id":"29BA6ACE7A9427489C33DC5901307461","title":"体验课01","desp":"","tags":" ","duration":503,"category":"07AD1E11DBE6FDFC","image":"http://2.img.bokecc.com/comimage/0DD1F081022C163E/2016-03-09/29BA6ACE7A9427489C33DC5901307461-0.jpg","imageindex":0,"image-alternate":[{"index":0,"url":"http://2.img.bokecc.com/comimage/0DD1F081022C163E/2016-03-09/29BA6ACE7A9427489C33DC5901307461-0/0.jpg"},{"index":1,"url":"http://2.img.bokecc.com/comimage/0DD1F081022C163E/2016-03-09/29BA6ACE7A9427489C33DC5901307461-0/1.jpg"},{"index":2,"url":"http://2.img.bokecc.com/comimage/0DD1F081022C163E/2016-03-09/29BA6ACE7A9427489C33DC5901307461-0/2.jpg"},{"index":3,"url":"http://2.img.bokecc.com/comimage/0DD1F081022C163E/2016-03-09/29BA6ACE7A9427489C33DC5901307461-0/3.jpg"}]}}

   其实我想获得“duration”这个属性,在网上搜索如何解析复杂json,五花八门,用什么技术的都有,但是都只用一种技术,依我看,几种技术组合起来用才是效率最高

  
这里的jsonObject用的是net.sf.json.JSONObject,jar包为json-lib-2.2.2-jdk13.jar;Gson所用到的jar包为gson-2.3.1.jar,其中json-lib-2.2.2-jdk13.jar不能单独使用,必须配合其他jar

下面代码为JSONObject与Gson的组合使用获取“duration”属性,将服务器返回的json作为参数传入即可

//解析json数据
    public static int parseJson(String str){
        JSONObject jObj = JSONObject.fromObject(str);
        Object obj=jObj.getJSONObject("video");
        String s2=obj.toString();
        Gson gson=new Gson();
        Map map=gson.fromJson(s2, Map.class);
        Number num=(Number)map.get("duration");
        return num.intValue();
    }


如果你想解析json里面的嵌套json数组,解决方法可参考这篇博客(http://blog.csdn.net/lhfeng/article/details/7398880)

在这里还有一个问题要提一下,由于duration属性是double类型的,取出来数值是503.0,我不想带小数点,所以我直接在下划线部分这样写

Integer num=(Integer)map.get("duration");

结果报错了,报java.lang.Double cannot be cast to java.lang.Integer  ,Integer属于不可更改类型,而且Double和Integer没有任何继承关系,当然不能这样转换。

注:java.lang.NumberInteger,Double的父类,所以要写成样 Number num=(Number)map.get("duration");最后再num.intValue()就可以去掉小数点了

这个错误可参考这篇博客(http://blog.sina.com.cn/s/blog_794d4bfd0102uz4i.html)

你可能感兴趣的:(json,解决方案,Gson,json)