用Gson、FastJson、Android原生类三种方式做Json节点解析

一、用Gson做节点解析

json:

{'flag':true,'data':{'name':'张三','age':18,'sex':true}}  

步骤 :

  1. 获得 解析者

    JsonParser parser = new JsonParser();

  2. 获得 根节点元素

    JsonElement element = parser.parse(json);

  3. 根据 文档判断根节点属于 什么类型的 Gson节点对象

     // 假如文档 显示 根节点 为对象类型  
     // 获得 根节点 的实际 节点类型 
     JsonObject root = element.getAsJsonObject();
    
  4. 取得 节点 下 的某个节点的 value

     // 获得 flag 节点的值, flag 节点为基本数据节点
     JsonPrimitive flagJson = root.getAsJsonPrimitive("flag");
     // 基本节点取值
     boolean flag = flagJson.getAsBoolean();
     
     // 获得 data 节点的值,data 节点为Object数据节点
     JsonObject dataJson = root.getAsJsonObject("data");
     // 将节点上的数据转换为对象
     Student stu = new Gson().fromJson(dataJson,Student.class);  
    

完整代码

public static void main(String[] args) {

    // json 节点解析
    String json = "{'flag':true,'data':{'name':'张三','age':18,'sex':true}}";

    // 1.获得 解析者
    JsonParser parser = new JsonParser();

    // 2.获得 根节点元素
    JsonElement element = parser.parse(json);

    // 3.根据 文档判断根节点属于 什么类型的 Gson节点对象
    JsonObject root = element.getAsJsonObject();

    // 4. 取得 节点 下 的某个节点的 value
    JsonPrimitive flagJson = root.getAsJsonPrimitive("flag");
    boolean flag = flagJson.getAsBoolean();

    JsonObject dataJson = root.getAsJsonObject("data");
    Student student = new Gson().fromJson(dataJson, Student.class);

    System.out.println(flag);
    System.out.println(student);

}

二、用fastjson做节点解析

案例1:

json字符串

[
    {
        "array": [
            {
                "salaryId": "297eb58f5a6029a1015a60460fb40096",
                "salaryName": "劳动补助"
            },
            {
                "salaryId": "8a28dd5b5653ed39015653eddf4e0002",
                "salaryName": "基本工资"
            },
            {
                "salaryId": "8a28dd5b5669a08301566eaddd1e0094",
                "salaryName": "绩效工资"
            }
        ],
        "result_code": 0
    }
]

解析方法

private List<SalaryTypeModel> parseTypeJson(String json) {
    List<SalaryTypeModel> lists = new ArrayList<>();
    JSONArray jsonArray = JSONArray.parseArray(json);
    JSONObject jsonObject = jsonArray.getJSONObject(0);
    JSONArray array = jsonObject.getJSONArray("array");
    if (array.size() != 0) {
        for (int i = 0; i < array.size(); i++) {
            JSONObject type = array.getJSONObject(i);
            SalaryTypeModel model = new SalaryTypeModel();
            for (String key : type.keySet()) {
                LogUtils.d(key + ", " + type.get(key));
                model.setSalaryId(key);
                model.setSalaryName((String) type.get(key));
            }
            lists.add(model);
        }
    }
    return lists;
}

案例2:

json字符串

{
    "array": [
        {
            "name": "系统管理员",
            "releaseDate": "2016-10",
            "其他补贴": 1,
            "岗位津贴": 1,
            "上下班交通补贴": 1,
            "课时津贴": 1,
            "薪级工资": 1,
            "岗位工资": 1,
            "超工作量津贴": 1,
            "独生子女保健费": 1,
            "粮油补贴": 1,
            "salary_total": 9
        }
    ],
    "result_code": 0
}

解析方法

private Map<String, Object> parseJson(String json) {
    Map<String, Object> maps = new HashMap<String, Object>();
    JSONObject jsonObj = JSONObject.parseObject(json);
    JSONArray jsonarray = jsonObj.getJSONArray("array");
    if (jsonarray.size() != 0) {
        JSONObject c = (JSONObject) jsonarray.get(0);
        for (String key : c.keySet()) {
            maps.put(key, c.get(key));
        }
    }
    return maps;
}

三、用Android原生类解析

解析根节点为”[]”的json:

json字符串

[
    {
        "id": 1580615,
        "name": "人人",
        "packageName": "com.renren.mobile.android",
        "iconUrl": "app/com.renren.mobile.android/icon.jpg",
        "stars": 2,
        "size": 21803987,
        "downloadUrl": "app/com.renren.mobile.android/com.renren.mobile.android.apk",
        "des": "2005-2014 你的校园一直在这儿。中国最大的实名制SNS网络平台,大学生"
    },
    {
        "id": 1540629,
        "name": "掌上营业厅",
        "packageName": "com.ct.client",
        "iconUrl": "app/com.ct.client/icon.jpg",
        "stars": 2,
        "size": 4794202,
        "downloadUrl": "app/com.ct.client/com.ct.client.apk",
        "des": "中国电信掌上营业厅是中国电信集团【官方】唯一指定服务全国电信用户的自助服务客户端"
    }
]

解析方法

JSONArray jsonArray=new JSONArray(json);
for(int i=0;i<jsonArray.length();i++){
 JSONObject object=jsonArray.getJSONObject(i);
 String id=object.getString("id");
 String name=object.getString("name");
 String packageName=object.getString("packageName");
 String iconUrl = object.getString("iconUrl");
 double stars=Double.parseDouble(object.getString("stars"));
 String size=object.getString("size");
 String downloadUrl = object.getString("downloadUrl");
 String des = object.getString("des");
 //其他操作
 ....
}

解析根节点为”{}”的json:

json字符串

 {
   "id": 1525490,
   "name": "有缘网",
   "packageName": "com.youyuan.yyhl",
   "iconUrl": "app/com.youyuan.yyhl/icon.jpg",
   "stars": 4,
   "size": 3876203,
   "downloadUrl": "app/com.youyuan.yyhl/com.youyuan.yyhl.apk",
   "des": "产品介绍:有缘是时下最受大众单身男女亲睐的婚恋交友软件。有缘网专注于通过轻松、"
 }

解析方法

JSONObject object = new JSONObject(json);
long id = object.getLong("id");
String name = object.getString("name");
String packageName = object.getString("packageName");
String iconUrl = object.getString("iconUrl");
float stars = Float.parseFloat(object.getString("stars"));
long size = object.getLong("size");
String downloadUrl = object.getString("downloadUrl");
String des = object.getString("des");

猜你喜欢

转载自blog.csdn.net/solocoder/article/details/83655793
今日推荐