• Gson解析复杂JSON字符串的两种方式


    JSON解析可以使用的库:

    JSONObject(源自Android官方)、
    Gson(源自Google)、
    Jackson(第三方开源库)、
    FastJSON(第三方开源库)、
    

    本文例子使用Google提供的Gson。

    什么是JavaBean

    JavaBean实际上是一种特殊的Java类,是一种规范,经常用于封装数据。JavaBean遵循如下编程原则:

    1、必须有一个public无参构造函数;
    2、所有属性私有化private;
    3、私有化的属性必须通过public的getter和setter暴露,且方法命名需要遵循getXXX(XXX首字母需要大写,故属性名称前两个字母大小写必须一致,避免混淆)、setXXX规则。
    4、可序列化,即实现java.io.serializable接口,用于实现Bean的持久化。
    

    方法一:JavaBean定义Json结构

    步骤1:根据Json结构定义相应封装类,类的属性(即属性名称)必须与Json结构的key一一对应。
    步骤2:直接把JSON字符串解析成步骤1的类

    JavaBean定义:

    class Body{
        public String getUrl() {
            return url;
        }
    
        public void setUrl(String url) {
            this.url = url;
        }
    
        public RequestData getRequestData() {
            return requestData;
        }
    
        public void setRequestData(RequestData requestData) {
            this.requestData = requestData;
        }
    
        private String url;
    
        private RequestData requestData;
    }
    
    class RequestData{
        private String ex;
    
        public String getEx() {
            return ex;
        }
    
        public void setEx(String ex) {
            this.ex = ex;
        }
    }
    
    

    json解析:

    import com.google.gson.Gson;
    import com.google.gson.JsonObject;
    import com.google.gson.JsonParser;
    
    //具体解析代码
    Gson gson = new Gson();
    Body bodyObj= gson.fromJson(body,Body.class);
    System.out.println("===="+bodyObj.getUrl());
    System.out.println("===="+bodyObj.getRequestData().getEx());
    
    

    方式二:直接解析最外层Json

    楼主的json字符串是一个复杂对象,只需要解析出外层的URL和reqData对象,再进行转发,实际并不关心reqData具体结构,故实际采取这种方式。
    JsonParser可以将json字符串解析转换为JsonObject, JsonObject可以通过get(key).getAsJsonObject(),直接解析JsonObject、string、int等.

    import com.google.gson.Gson;
    import com.google.gson.JsonObject;
    import com.google.gson.JsonParser;
    
    //具体解析代码
    String body = "{"requestData":{"ex":"ext"},"url":"456"}";
    JsonParser parser = new JsonParser();
    JsonObject jsonObject  = parser.parse(body).getAsJsonObject();
    JsonObject s = jsonObject.get("requestData").getAsJsonObject();
    System.out.println("=====" + s.toString());
    
    
  • 相关阅读:
    fastjson反序列化漏洞研究(上)
    csv注入复现代码
    day24-python之面向对象
    day23-python之日志 re模块
    day22-python之模块
    day21-python模块
    day20-python之装饰器
    day18-python之迭代器和生成器
    day17-python之文件操作
    day16-python之函数式编程匿名函数
  • 原文地址:https://www.cnblogs.com/amyzhu/p/8545286.html
Copyright © 2020-2023  润新知