Json解析

快速使用:java解析复杂json:JSONObject 和 JSONArray的使用 - 有梦就能实现 - 博客园

详解:JSON三种数据解析方法(转) - mao的博客 - 博客园

JsonObject 和 JsonArray的使用

我们的目的是解析下面这样的json内容:

 {
     "feeds": [
         {
             "id": 299080,
             "oid": 288342,
             "category": "article",
             "data": {
                 "subject": "视频直播:会面",
                 "summary": "在新加坡会面",
                 "cover": "/288342/56a263bcab4a4c55b0bef0528ce880b6_padmini.JPG",
                 "pic": "",
                 "format": "video",
                 "changed": "2015-11-07 14:35:22"
             }
         },
         {
             "id": 299076,
             "oid": 288340,
             "category": "article",
             "data": {
                 "subject": "荔新闻3.0:不止是阅读",
                 "summary": "手机应用“荔新闻”于近期推出全新升级",
                 "cover": "/288340/3e8e2c397c70469f8845fad73aa38165_padmini.JPG",
                 "pic": "",
                 "format": "txt",
                 "changed": "2015-09-22 16:01:41"
             }
         }
     ],
     "PageIndex": 1,
     "PageSize": 20,
     "TotalCount": 53521,
     "TotalPage": 2677
 }

我们看上面的符号,里面有[] ,{}等符号,其中

  • [] 中括号代表的是一个数组

  • {} 大括号代表的是一个对象

  • 双引号 “” 表示的是属性值

  • 冒号 : 代表的是前后之间的关系,冒号前面是属性的名称,后面是属性的值,这个值可以是基本数据类型,也可以是引用数据类型

我们先来JSONObject(系统自带的类)类中的方法:

这里写图片描述

代码如下:

 public class JsonUtils {
     /**
      * 根据json数据解析返回一个List<HashMap<String, Object>>集合
      * @param json  json数据
      * @return
      */
     public static List<HashMap<String, Object>> getJsonList(String json) {
         List<HashMap<String, Object>> dataList;
         dataList = new ArrayList<>();
         try {
             JSONObject rootObject = new JSONObject(json);
             JSONObject paramzObject = rootObject.getJSONObject("paramz");
             JSONArray feedsArray = paramzObject.getJSONArray("feeds");
             for (int i = 0; i < feedsArray.length(); i++) {
                 JSONObject sonObject = feedsArray.getJSONObject(i);
                 JSONObject dataObject = sonObject.getJSONObject("data");
                 String subjectStr = dataObject.getString("subject");
                 String summaryStr = dataObject.getString("summary");
                 String coverStr = dataObject.getString("cover");
                 HashMap<String, Object> map = new HashMap<>();
                 map.put("subject", subjectStr);
                 map.put("summary", summaryStr);
                 map.put("cover", coverStr);
                 dataList.add(map);
             }
             return dataList;
         } catch (JSONException e) {
             e.printStackTrace();
         }
         return null;
     }
 }

下面我又写了一个解析的方法,方法中会有一些冗余的代码,是为了更加深刻理解JSON解析而写的,实际中可以删掉,也用了一行GSON解析

 public class DataModel {
 ​
     /**
      * subject : 会面
      * summary : 在新加坡会面
      * cover : /Attachs/Article/288342/56a263bcab4a4c55b0bef0528ce880b6_padmini.JPG
      * pic :
      * format : video
      * changed : 2015-11-07 14:35:22
      */
 ​
     public String subject;
     public String summary;
     public String cover;
     public String pic;
     public String format;
     public String changed;
 ​
     @Override
     public String toString() {
         return "DataModel{" +
                 "subject='" + subject + '\'' +
                 ", summary='" + summary + '\'' +
                 ", cover='" + cover + '\'' +
                 ", pic='" + pic + '\'' +
                 ", format='" + format + '\'' +
                 ", changed='" + changed + '\'' +
                 '}';
     }
 }
 /**
 * 根据json对象获取List<DataModel>集合
 * @param json 数据
 * @return
 */
 public static List<DataModel> getGsonList(String json) {
         List<DataModel> dataList;
         try {
             JSONObject rootObject = new JSONObject(json);
             JSONObject paramzObject = rootObject.getJSONObject("paramz");
 ​
             /**
              * JSONArray的构造方法获取JSONArray对象
              */
             JSONArray jsonArray = new JSONArray(paramzObject.getString("feeds"));
             Log.i(TAG, "jsonarray.length():"+jsonArray.length());
 ​
             /**
              * 获取JSONObject对象的属性关键字
              */
             Iterator<String> iterators = paramzObject.keys();
             while (iterators.hasNext()) {
                 Log.i(TAG, "iterators: " + iterators.next());
             }
             JSONArray feeds = paramzObject.getJSONArray("feeds");
             dataList = new ArrayList<>();
             for (int i = 0; i < feeds.length(); i++) {
                 JSONObject jsonObject = feeds.getJSONObject(i);
                 DataModel model = new Gson().fromJson(jsonObject.getString("data"),                 new TypeToken<DataModel>() {
                 }.getType());
                 Log.i(TAG, "DataModel: " + model.toString());
                 dataList.add(model);
             }
             return dataList;
         } catch (JSONException e) {
             // TODO Auto-generated catch block
             e.printStackTrace();
         }
 ​
         return null;
     }
 }

运行结果:

这里写图片描述

总结

  • 对于JSONObject对象来说,想要得到一个JSONObject对象通常可以通过

    • 构造方式:JSONObject(String json)-> JSONObject rootObject = new JSONObject(json);

    • JSONObject getJSONObject(String name){} -> JSONObject paramzObject = rootObject.getJSONObject(“paramz”);

  • 对于JSONArray对象来说,想要得到一个JSONArray对象通常可以通过

    • 构造方式:JSONArray(String json) -> JSONArray jsonArray = new JSONArray(paramzObject.getString(“feeds”));

    • JSONObject getJSONObject(String name){} -> JSONArray feeds = paramzObject.getJSONArray(“feeds”);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值