Gson学习

package com.bh.test;

import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.Date;
import java.util.LinkedList;
import java.util.List;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.reflect.TypeToken;

/**Gson test
 * @author cyq
 *
 */
public class Test {

    public Test() {
        method0();
    }

    /**对基本类型或引用类型
     */
    public void method0(){

        Gson gson = new Gson();
        String json = gson.toJson(123);
        System.out.println(json);
        int target2 = gson.fromJson(json, int.class);
        System.out.println(target2);
    }
    /**对集合处理 集合泛型为基本类型或引用类型
     */
    public void method1(){

        Type listType = new TypeToken<List<String>>() {}.getType();
        List<String> target = new LinkedList<String>();
        target.add("zs");

        Gson gson = new Gson();
        String json = gson.toJson(target, listType);
        System.out.println(json);
        List<String> target2 = gson.fromJson(json, listType);
        System.out.println(target2);
    }

    /**
     * 基于已有的使用经验,如果不做对字段进行特别的处理,对于引用类型的成员,如果取值为null时,编码后将不会出现在json字符串中,这是gson的默认行为。
     * 但通过修改gson的默认行为,可以将取值为null的字段也输出到json字符串中。
     */
    public void method2(){

        Gson gson = new GsonBuilder().setVersion(1.1).serializeNulls().setPrettyPrinting().create();// 调用serializeNulls方法,改变gson对象的默认行为
        Gson gson1 = new Gson();
        Person person=new Person();
        person.setAge(10);
        person.setName("zs");
        String gsonStr=gson.toJson(person);
        System.out.println(gsonStr);
        System.out.println(gson.fromJson(gsonStr, Person.class));
        String gsonStr1=gson1.toJson(person);
        System.out.println(gsonStr1);
        System.out.println(gson1.fromJson(gsonStr1, Person.class));
    }

    /**
     * 对集合的处理,集合中保存不同的对象
     */
    public void method3(){

        Gson gson = new Gson();
        String str= "{\"name\":\"value1\",\"age\":\"11\"}";
        String str2= "{\"id\":\"11\",\"name\":\"value2\"}";
        List<String>list=new ArrayList<>();
        list.add(str);
        list.add(str2);
        String jsonStr=gson.toJson(list);
        System.out.println(jsonStr);
        List<String> obj = gson.fromJson(jsonStr, new TypeToken<List<String>>() {}.getType());
        System.out.println(gson.fromJson(obj.get(0), Person.class));
        System.out.println(gson.fromJson(obj.get(1), User.class));
    }

    /**对日期类的处理
     */
    public void method4(){

        Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd").create();   
        User user=new User();  
        user.setName("lmw");  
        user.setBirthDay(new Date()); 
        String jsonStr=gson.toJson(user);
        System.out.println(jsonStr);  
        User uu=gson.fromJson(jsonStr, User.class);  
        System.out.println(uu);  
    }

    /**枚举类型
     */
    public void method5(){

        Gson gson = new GsonBuilder().registerTypeAdapter(Hobby.class,new EnumSerializer()).create();
        User user = new User();
        user.setName("item_name");
        user.setHobby(Hobby.BASKETBALL);// 这个 state是枚举值  
        String s = gson.toJson(user);
        System.out.println(s);
        User retItem = gson.fromJson(s, User.class);  
        System.out.println(retItem);
    }

    public static void main(String[] args) {
        new Test();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值