Java gson使用

一、简介

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。
Gson是Google提供的用来在Java对象和JSON数据之间进行映射的Java类库。可以将一个JSON字符串转成一个Java对象(反序列化),或者反过来(序列化)。

二、使用

1、依赖管理
<!-- https://mvnrepository.com/artifact/com.google.code.gson/gson -->
<dependency>
  <groupId>com.google.code.gson</groupId>
  <artifactId>gson</artifactId>
  <version>2.9.0</version>
</dependency>
2、JavaBean序列化/反序列化
//Java对象序列化为字符串
public String toJson(Object src);
//将jsonstr 反序列化为Java 对象
public <T> T fromJson(String json, Class<T> classOfT)
1、普通Java对象
		Gson gson = new Gson();
        Person person = new Person("zhangsan", 20, true);
        String json = gson.toJson(person);//序列化成字符串
        System.out.println("序列化成字符串:"+json);
        Person person1=gson.fromJson(json,Person.class);
        System.out.println("反序列化:"+person1);
2、Java数组对象
    public static void testGsonaRRAY() {
        Gson gson = new Gson();
        Person person1 = new Person("zhangsan", 20, true);
        Person person2= new Person("zhangsan", 20, true);
        Person person3 = new Person("zhangsan", 20, true);
        Person[] persons = new Person[3];
        persons[0]=person1;
        persons[1]=person2;
        persons[2]=person3;
        String s = gson.toJson(persons);
        System.out.println("序列化:"+s);
        Person[] people = gson.fromJson(s, Person[].class);
        System.out.println("反序列化:"+people[0]);
        System.out.println("反序列化:"+people[1]);
        System.out.println("反序列化:"+people[2]);
    }
3、List

对泛型集合,进行反序列化需要使用TypeToken设置类型

    public static void testList(){
        ArrayList<Person> arrayList = new ArrayList<>();
        arrayList.add(new Person("zhangsan",20,false));
        arrayList.add(new Person("zhangliu",21,false));
        arrayList.add(new Person("zhangwu",22,false));
        Gson gson = new Gson();
        String s = gson.toJson(arrayList);
        System.out.println("序列化:"+s);
        Type type = new TypeToken<List<Person>>() {}.getType(); //泛型类型,import com.google.gson.reflect.TypeToken;
        List<Person> list = gson.fromJson(s, type);
        list.forEach(System.out::println);
    }

Set 、Map集合类型

 Type type = new TypeToken<Set<Person>>() {}.getType();
Set<Person> personSet= gson.fromJson(s, type); //反序列化

Type type = new TypeToken<Map<String, Person>>() {}.getType(); 
Map<String,Person> userMap2 = gson.fromJson(s, type);



4、变量值为null时的序列化/反序列化

如果一个变量的值为NULL,那么按照GSON默认的处理为忽略这个宁段

5、控制序列化/反序列化的变量名称

可以借助@SerializedName注解控制JSON字段中Key的命名。
如果希望指定GSON对某些字段配置是否参与序列化与反序列化可以使用@Expose注解控制,同时使用GsonBuilder创建Gson对象:
另外直接使用transient关键字修饰的变量,也可以让该变量不参与序列化/反序列化

三、GsonBuilder

GsonBuilder 构建 Gson
对于默认配置的 Gson,直接使用 new Gson 更简单,当需要设置默认值以外的配置选项时,使用 GsonBuilder 构建器,调用它的各种配置方法,最后调用 create 方法创建 Gson 对象。

//序列化空字段,默认情况下,Gson 序列化期间会忽略所有为 null 的字段
GsonBuilder serializeNulls();
//根据提供的模式序列化 Date 日期对象,可以多次调用,但只有最后一次调用将用于决定序列化格式。
GsonBuilder setDateFormat(String pattern);

四、JsonObject

1、JsonElement

Gson中Json对象的抽象类,代表着json串的某一个元素,元素可以为有JsonArray(json数组)、JsonObject(json对象)、JsonPrimitive(Java基本类型)、JsonNull(null)

2、JsonParser

将json字符串转化为JsonElement对象

//将jsonstr转化为JsonElement
public static JsonElement parseString(String json) 

public static JsonElement parseReader(Reader reader)

public static JsonElement parseReader(JsonReader reader)
3、JsonPrimitive

Java基本类型

public static void testJsonObject2(){
        Person person = new Person("zhangwu", 22, true);
        Gson gson = new Gson();
        String s = gson.toJson(person);
        JsonObject jsonObject1 = gson.fromJson(s, JsonObject.class);
        System.out.println(jsonObject1);
        System.out.println("===========jsonParser==============");
        JsonObject jsonObject2 = JsonParser.parseString(s).getAsJsonObject();
        System.out.println(jsonObject2.get("gender").getAsBoolean());
        Set<String> strings = jsonObject2.keySet();
        for (String str:strings) {
            System.out.println(jsonObject2.get(str));
        }
        JsonObject jsonObject3 = new JsonObject();
        jsonObject3.add("person",jsonObject2);
        System.out.println(jsonObject3.get("person"));
    }
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值