对json格式的数据进行解析(jsonObject 与 jsonArray)

前言

使用 jsonObject 和 jsonArray 对层层嵌套的json数据进行解析

准备工具

idea,org.json.JSONObject(若jar包不一样,方法思路大致一样)

解析思路

  1. 先观察 json 的类型是 jsonObject 还是jsonArray 的(分辨方法查看第二步)
  2. 若是 jsonObject 类,值没有嵌套jsonObject,直接get取“键”即可,若嵌套则观察值的类型,jsonObject则用getObject,若是jsonArray 则使用getJsonArray方法取
  3. 若是jsonArray,利用遍历,来获取值,

1.json格式的数据

{
"website":"chinamobilesh",
"create_time":157360,
"basic_version":{
    "user_gender": "男",
    "user_searched_history_by_orgs": [
      {
        "org_self": true,
        "searched_date": "2017-11-07",
        "searched_org": "其他"
      },
      {
        "org_self": false,
        "searched_date": "2017-07-08",
        "searched_org": "线上消费分期"
      },
    ]
 }
}

如果直接放在java 代码里面测试,需要加上\

String data = "{\"website\":\"chinamobilesh\", \"create_time\":157360, \"basic_version\":{\"user_gender\": \"\",\"user_searched_history_by_orgs\": [{\"org_self\": true,\"searched_date\": \"2017-11-07\",\"searched_org\": \"其他\"},{\"org_self\": false,\"searched_date\": \"2017-07-08\",\"searched_org\": \"线上消费分期\"}]}}";

2.jsonObject与jsonArray数据的区别

//jsonObject (用`{}`括起来的)
String str1 = '{"website":"chinamobilesh",
"create_time":157360}';

//jsonArray (用`[]`括起来的)
String str2 = '[{"website":"America",
"create_time":"123"},{"website":"china",
"create_time":"234"}]'

3. 解析数据

 //将 string 类型转成 JSONObject 类型
 JSONObject jsonObject= new  JSONObject(data);
3.1 获取website 的值
//3.1.1返回值我这里选择用 String 接收(不清楚值的类型可以直接用get()方法,然后转成想保存的类型)
String website  = String.valueOf(jsonObject.get("website"));
//3.1.2若已知类型为String
 String  website = jsonObject.getString("website");
 //3.1.3 若已知类型为 int (例如 create_time 的值没有"",所以为 int 类型)
 int createTime= jsonObject.getInt("create_time");

结果为:chinamobilesh
157360
157360

注意:使用getString(),getInt(),getBollean()需要确定值的类型,类型不匹配会引发异常,类似Exception in thread "main" org.json.JSONException: JSONObject["basic_version"] not a string.,所以还是直接get()后强转地方便,仅个人意见。

3.2 获取 basic_version里的 user_gender的值
//3.2.1 由于 basic_version 的值是jsonObject 类型
//第一种 直接转成 jsonObject 类
JSONObject basicVersions = (JSONObject) jsonObject.get("basic_version");
//第二种 直接获取 jsonObject 类
  JSONObject basicVersions = jsonObject.getJSONObject("basic_version")
;

//3.2.2 取user_gender 的值
String userGender = String.valueOf(basicVersions .get("user_gender "));

结果为:男

3.3 获取 第一个 org_self的值
 JSONObject basicVersion = jsonObject.getJSONObject("basic_version");
 //通过观察可以看出user_searched_history_by_orgs的值是个JSONArray 
 JSONArray userSearchedHistoryByOrgs  = basicVersion.getJSONArray("user_searched_history_by_orgs");
   String orgSelf = null;
   for (int i=0; i < userSearchedHistoryByOrgs.length(); i++){
    //每一个array都是一个JSONObject 
       JSONObject jo = userSearchedHistoryByOrgs.getJSONObject(i);
       orgSelf= String.valueOf(jo.get("org_self"));
       break;
   }

结果为:true
嵌套的json就是一层一层往下剥,观察值的类型,熟练了还是比较简单的。

额外补充:

import com.alibaba.fastjson.JSONObject;
 //若需要解析的data不是json格式,需现将其转成Json格式的String
 String beeAuthData = JSON.toJSONString(data);
 //将 string 类型转成 JSONObject 类型
 JSONObject beeAuthObject = JSON.parseObject(beeAuthData);

猜你喜欢

转载自blog.csdn.net/cherry_xiu/article/details/81155860