Gson的使用

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

依赖

<dependency>
        <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.8.3</version>
</dependency>

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注解的字段进行处理

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。