Gson解析使用指南

原创 2016年05月30日 21:24:40

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();
    Type type= new TypeToken<List<Student>>() {}.getType();
    // 将 json 转化 成 List泛型
    List<Student> stus = gson.fromJson(json, type);
    
  • 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);
      

Gson的两种解析用法

第一种.     常见的解析,直接将json字符串解析为对应的类. public JavaBean getJsonString(String jsonString) { Gson ...
  • cockiejock
  • cockiejock
  • 2017年02月07日 09:56
  • 153

gson解析json数组

GSON的两个重要方法   在GSON的API中,提供了两个重要的方法:toJson()和fromJson()方法。其中,toJson()方法用来实现将Java对象转换为相应的JSON数据,from...
  • L_GQ_
  • L_GQ_
  • 2016年07月24日 14:28
  • 10916

Gson解析Date,日期格式

// Weather weather = new Weather(); // weather.setId(123); // weather.setUpdatedTime(new Date());...
  • u010002184
  • u010002184
  • 2017年02月11日 12:16
  • 1181

使用Gson解析复杂的json数据

Gson解析复杂的json数据
  • tkwxty
  • tkwxty
  • 2014年06月25日 18:48
  • 172988

Android Gson深入分析

目前解析json有三种工具
  • rain_butterfly
  • rain_butterfly
  • 2014年08月06日 17:51
  • 10967

Gson 的简单封装,避免解析null时报错

当我们使用gson进行数据解析的时候,我们通常会发现有时候解析String字符串类型但是后台返回的是null 因此我们要对此进行特殊处理,下面便是对gson的一些简单封装。public static ...
  • GL_MINE_CSDN
  • GL_MINE_CSDN
  • 2017年03月02日 20:23
  • 1646

Gson解析(详解)

先介绍一下Android原生的解析 在Android中包含四个与JSON相关的类和一个Exceptions: JSONObject    JSONArray             J...
  • heinika
  • heinika
  • 2015年11月08日 16:56
  • 2820

gson泛型 解决所有数据解析问题

解析 json一直用gson 突然出现了这个问题 类是这样的 很简单 但每个类都没有关联性  这样写代码太垃圾了。。复用性在哪里。。 所以打算用一个通用的方法 ,网上查 自己写 出现啦这三种方...
  • wanghao200906
  • wanghao200906
  • 2014年12月15日 16:10
  • 3182

使用Gson解析Json字符串(实际项目)

见另一篇博文如何准备好jar包;需要转的Json字符串很复杂,多层嵌套; 例如:{ "status": { "success": true, "code": ...
  • fengfeng043
  • fengfeng043
  • 2015年04月15日 16:38
  • 1213

Gson解析json数据

json解析我们不陌生了,不过每次编写解析的代码时总是很头疼,一堆很无聊的代码,如果有50个接口那就得写50个相似的解析处理。其实谷歌和阿里很早就推出了解析json的工具包,谷歌的Json,阿里的Fa...
  • itachi85
  • itachi85
  • 2015年04月22日 09:49
  • 33860
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Gson解析使用指南
举报原因:
原因补充:

(最多只允许输入30个字)