Gson的使用

为什么转用Gson了,FastJSON bug实在是太多了!

依赖


        com.google.code.gson
    gson
    2.8.3

pojo

class JsonBean{
        int code;
        String msg;

        Object extend;

        public int getCode() {
            return code;
        }

        public void setCode(int code) {
            this.code = code;
        }

        public String getMsg() {
            return msg;
        }

        public void setMsg(String msg) {
            this.msg = msg;
        }

        public Object getExtend() {
            return extend;
        }

        public void setExtend(Object extend) {
            this.extend = extend;
        }
    }

谷歌Gson解析json


        String json  = "{\"code\":100,\"msg\":\"处理成功!\",\"extend\":{\"jsonString\":{\"userId\":1,\"userName\":\"123\",\"userPwd\":\"123\"}}}";

        JsonObject  jsonObject = (JsonObject) new JsonParser().parse(json).getAsJsonObject();
        System.out.println(jsonObject.get("msg").getAsString());//获取msg key的值
        System.out.println(jsonObject.get("code").getAsInt());//获取code key的值 输出格式为int
        JsonObject extend = jsonObject.getAsJsonObject("extend");//获取extend 节点JSonObject 对象
        System.out.println(extend.get("jsonString"));//获取jsonString 值
        System.out.println(extend.get("jsonString").getAsJsonObject());//获取jsonString 作为JSonObject 对象
        System.out.println(extend.get("jsonString").getAsJsonObject().get("userId"));//获取userId值

json转java对象

   //json转java对象

        Gson gson = new Gson();
        
        JsonBean jsonBean = gson.fromJson(json, JsonBean.class);
        System.out.println("json转java对象 " + jsonBean);

        //java转json
        System.out.println("java转json "  + gson.toJson(jsonBean));

结果输出

在这里插入图片描述

API

红色是转json对象
绿色是转java对象
其他的api暂时没涉及到。


在这里插入图片描述

序列化

序列化别名

@SerializedName("w");
String age;

当序列化的时候,会把Java bean中的字段age存储成w,在反序列化的时候会把Json的w这个key反序列化到Java bean的width字段上。

声明该字段不参与反序列化

@Expose(deserialize = false)

声明该字段序列化和反序列化都不参与
@Expose(serialize = false, deserialize = false)

要使该注解生效,必须对Gson进行配置

GsonBuilder builder = new GsonBuilder();
builder.excludeFieldsWithoutExposeAnnotation();
Gson gson = builder.create();

注意
只要有一个字段使用了Expose注解,所有需要参与序列化和反序列化的字段都要有这个注解 因为这个注解要么不生效,如果生效的话,就只会对有Expose注解的字段进行处理

你可能感兴趣的:(Gson的使用)