Gson基本的使用

Gson介绍:

GSON是Google提供的用来在Java对象和JSON数据之间进行映射的Java类库。可以将一个Json字符转成一个Java对象,或者将一个Java转化为Json字符串。

特点: a、快速、高效

      b、代码量少、简洁

      c、面向对象

        d、数据传递和解析方便

Gson的pom:

<!--gson-->
<dependency>
  <groupId>com.google.code.gson</groupId>
  <artifactId>gson</artifactId>
  <version>2.8.0</version>
</dependency>
<dependency>
   <groupId>org.projectlombok</groupId>
   <artifactId>lombok</artifactId>
</dependency>

1.gson生成json数据

public void Gsons(){
         DiaoSi diaoSi = new DiaoSi(); //实体
        diaoSi.setName("生日");
        diaoSi.setSex("nana");
        diaoSi.setAge(20);
        
        HashMap<String, Object> map = new HashMap<>();
        map.put("name","hahahha" );
        map.put("age",2313 );
        map.put("sex",123123 );

        Gson gson = new Gson();  
        System.out.println(gson.toJson(map)); //通过gson.toJson()方法转为json串
        System.out.println(gson.toJson(diaoSi));

2.美化json

@Test
    public void Gsons(){
        DiaoSi diaoSi = new DiaoSi(); //实体
        diaoSi.setName("生日");
        diaoSi.setSex("nana");
        diaoSi.setAge(20);

        //美化json
        GsonBuilder gsonBuilder = new GsonBuilder();
        gsonBuilder.setPrettyPrinting();
        Gson gson = gsonBuilder.create();
        System.out.println(gson.toJson(diaoSi));

 

3.如果key不一致的时候,可以用回调/注解

public void Gsons(){
        DiaoSi diaoSi = new DiaoSi(); //实体
        diaoSi.setName("生日");
        diaoSi.setSex("nana");
        diaoSi.setAge(20);

       //进行回调
        GsonBuilder gsonBuilder = new GsonBuilder();
        gsonBuilder.setPrettyPrinting();
        gsonBuilder.setFieldNamingStrategy(new FieldNamingStrategy() {//回调函数
            @Override
            public String translateName(Field f) {
               if(f.getName().equals("name")){  //获取name值
                   return "hahaha";
               }
               return f.getName();
            }
        });
        Gson gson = gsonBuilder.create();
        System.out.println(gson.toJson(diaoSi));

 

也可以在实体的属性 @SerializedName("hahaha") 效果是一样的,用回调就不能用注解了。

4.解析json

@AllArgsConstructor //全参构造函数
@NoArgsConstructor  //空参构造函数
@Data //set get
@Accessors(chain=true) //链式访问
public class ZhangSan {
    private String name;
    private Double age;
    private String birthday;
    private String[] majar;
    private boolean house;
}
    @Test
    public void Gsonsbean(){
        //读取json文件路径
        File file = new File(jsonTest.class.getResource("/zhangsan.json").getFile());
        try {
            //读取json内容
            String s = FileUtils.readFileToString(file);
            Gson gson = new Gson();

            //把gson对象进行反解析,映射关系是实体的key
            ZhangSan zhangSan = gson.fromJson(s, ZhangSan.class);
            System.out.println(zhangSan);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

 

如果是日期类型呢?怎么半。

//把实体birthday实行换成Date类型

 

@Test
    public void Gsonsbean(){
        //读取json文件路径
        File file = new File(jsonTest.class.getResource("/zhangsan.json").getFile());
        try {
            //读取json内容
            String s = FileUtils.readFileToString(file);
            //定义日期格式
            Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create();
            //把gson对象进行反解析,映射关系是实体的key
            ZhangSan zhangSan = gson.fromJson(s, ZhangSan.class);

            System.out.println(gson.toJson(zhangSan));
            
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

5.集合类解析

Gson能把json的数据格式,完美无瑕的对接到list里

@AllArgsConstructor //全参构造函数
@NoArgsConstructor  //空参构造函数
@Data //set get
@Accessors(chain=true) //链式访问
public class ZhangSan {
    private String name;
    private Double age;
    private String birthday;
    private List<String> majar;      //原来是 private String[] majar;
    private boolean house;
}

正常打印就可以,都是很基本的功能。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员s

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值