GSON的使用

来源:互联网 发布:西安软件新城二期 编辑:程序博客网 时间:2024/06/16 00:39

 JSON介绍

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

格式

Json keyvalue的形式存储数据;

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相当于树的节点.

 Gson下载

 网址 http://mvnrepository.com/artifact/com.google.code.gson/gson

 Gson解析格式化

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

·       实现步骤 :

     获得需要的对象:

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

     格式化

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

Gson解析

Json字符串解析 java对象.

 Gson节点对象:

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

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

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

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

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

JsonElement的取值:

JsonPrimitive :value取值对应 java

int,double,float,long,short,boolean,char,byte,String,BigDecimal,BigInteger,Number

JsonObject : value取值对应 java Object对象.

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}}  

步骤 :

 获得解析者

JsonParser parser = new JsonParser();

 获得根节点元素

JsonElement element = parser.parse(json);

根据文档判断根节点属于什么类型的 Gson节点对象

// 假如文档显示根节点为对象类型
// 获得根节点的实际节点类型
JsonObject root = element.getAsJsonObject();

取得节点的某个节点的 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);

1 0
原创粉丝点击