Gson笔记

GSON


Json 介绍

Json 全称 JavaScript Object Natation ,用来描述数据结构,它是基于纯文本的数据格式,是一种轻量级的数据交换格式。广泛应用于 服务端 与 客户端 的数据交互。

  • 格式

    Json 以 key-value的形式存储数据;

    Key的取值 为 String 类型;

    Value的取值 为 String,boolean,Number,数组,Object,null;

    Json 串 以 { 开始, 以 } 结尾;

    Json 串中 数组 是 以 [ 开始, 以 ] 结尾;

    Json 串中 Object 是 以 { 开始, 以 } 结尾;

  • 案例

    基本类型 :

    {
        "name": "张三",
        "age": 18,
        "sex": true
    }
    

    数组类型 :

    [               
            {
                "name": "张三",
                "age": 18,
                "sex": true
            },
            {
                "name": "李四",
                "age": 19,
                "sex": false
            }
    ]
    

    对象嵌套 :

    {
        "name": "teacher",
        "computer": {
            "CPU": "intel7",
            "disk": "512G"
        },
        "students": [
            {
                "name": "张三",
                "age": 18,
                "sex": true
            },
            {
                "name": "李四",
                "age": 19,
                "sex": false
            }
        ]
    }
    
  • 树状结构

    json 字符串相当于一个倒挂的树, key 相当于 树的节点.

    json 树结构

Gson 下载

Gson 格式化 和 解析

Gson 格式化


将 java 对象 格式化为 Json 字符串.

  • 实现步骤 :

    1. 获得需要的对象:

      Student stu = new Student();
      stu.setName("张三");
      stu.setAge(18);
      stu.setSex(true);
      
    2. 格式化

      Gson gson = new Gson();
      //将 对象 转化成 json 字符串
      String json = gson.toJson(stu)
      

Gson 解析


将 Json 字符串 解析 成 java 对象.

  • Gson 的 节点对象:

    JsonElement : 所有的节点 都是 JsonElement 对象.

    JsonPrimitive : 基本的 数据类型的 节点 对象, JsonElement 的子类.

    JsonNull : 代表 空节点 对象,即 有 key,value 为空,JsonElement 的子类.

    JsonObject : 对象 数据类型的 节点 对象, JsonElement 的 子类.

    JsonArray : 数组 数据类型的 节点 对象, JsonElement 的 子类.

  • JsonElement的取值:

    1. JsonPrimitive : value 的 取值对应 java

      int,double,float,long,short,boolean,char,byte,String,BigDecimal,BigInteger,Number
    2. JsonObject : value 的 取值对应 java 的 Object 对象.

    3. JsonArray : value 的 取值对应 java 的 List 及其子类对象.

  • Json的解析成 java 对象

    json:

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

    代码:

    Gson gson = new Gson();
    // 将json 转化成 java 对象
    Student stu = gson.fromJson(json, Student.class);
    
  • Json 解析 成 List

    json:

    [{'name':'小1','age':18,'sex':true},{'name':'小2','age':19,'sex':false},{'name':'小3','age':20,'sex':true},{'name':'小4','age':21,'sex':false},{'name':'小5','age':22,'sex':true}]
    

    代码:

    Gson gson = new Gson();
    // 将 json 转化 成 List泛型
    List<Student> stus = gson.fromJson(json, new TypeToken<List<Student>>() {}.getType());
    
  • Json 解析 成 map

    json:

    {'小3':{'name':'小3','age':20,'sex':true},'小4':{'name':'小4','age':21,'sex':false},'小5':{'name':'小5','age':22,'sex':true},'小1':{'name':'小1','age':18,'sex':true},'小2':{'name':'小2','age':19,'sex':false}}
    

    代码:

    Gson gson = new Gson();
    // 将 json 转化 成 Map泛型
    Map<String,Student> map = gson.fromJson(json, new TypeToken<Map<String,Student>>() {}.getType());
    
  • Json 节点 的解析

    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);
      
包含以下java源文件: com.google.gson.DefaultDateTypeAdapter.class com.google.gson.ExclusionStrategy.class com.google.gson.FieldAttributes.class com.google.gson.FieldNamingPolicy.class com.google.gson.FieldNamingStrategy.class com.google.gson.Gson.class com.google.gson.GsonBuilder.class com.google.gson.InstanceCreator.class com.google.gson.JsonArray.class com.google.gson.JsonDeserializationContext.class com.google.gson.JsonDeserializer.class com.google.gson.JsonElement.class com.google.gson.JsonIOException.class com.google.gson.JsonNull.class com.google.gson.JsonObject.class com.google.gson.JsonParseException.class com.google.gson.JsonParser.class com.google.gson.JsonPrimitive.class com.google.gson.JsonSerializationContext.class com.google.gson.JsonSerializer.class com.google.gson.JsonStreamParser.class com.google.gson.JsonSyntaxException.class com.google.gson.LongSerializationPolicy.class com.google.gson.TreeTypeAdapter.class com.google.gson.TypeAdapter.class com.google.gson.TypeAdapterFactory.class com.google.gson.annotations.Expose.class com.google.gson.annotations.SerializedName.class com.google.gson.annotations.Since.class com.google.gson.annotations.Until.class com.google.gson.internal.ConstructorConstructor.class com.google.gson.internal.Excluder.class com.google.gson.internal.JsonReaderInternalAccess.class com.google.gson.internal.LazilyParsedNumber.class com.google.gson.internal.LinkedTreeMap.class com.google.gson.internal.ObjectConstructor.class com.google.gson.internal.Primitives.class com.google.gson.internal.Streams.class com.google.gson.internal.UnsafeAllocator.class com.google.gson.internal.bind.ArrayTypeAdapter.class com.google.gson.internal.bind.CollectionTypeAdapterFactory.class com.google.gson.internal.bind.DateTypeAdapter.class com.google.gson.internal.bind.JsonTreeReader.class com.google.gson.internal.bind.JsonTreeWriter.class com.google.gson.internal.bind.MapTypeAdapterFactory.class com.google.gson.internal.bind.ObjectTypeAdapter.class com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.class com.google.gson.internal.bind.SqlDateTypeAdapter.class com.google.gson.internal.bind.TimeTypeAdapter.class com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.class com.google.gson.internal.bind.TypeAdapters.class com.google.gson.reflect.TypeToken.class com.google.gson.stream.JsonReader.class com.google.gson.stream.JsonScope.class com.google.gson.stream.JsonToken.class com.google.gson.stream.JsonWriter.class com.google.gson.stream.MalformedJsonException.class
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值