Google开源GSON的使用

Stella981
• 阅读 874

* 谷歌开原项目GitHub地址:https://github.com/google/gson

1.新建一个maven项目,引入gson的dependency坐标依赖以及commons-io的坐标:

<!--处理json格式数据-->
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.4</version>
        </dependency>

        <!--做io文件的操作-->
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.4</version>
        </dependency>

2.编写一个Student 的JavaBean:

package com.wxd.basic.gson;

import java.util.Arrays;

public class Student {
    private String name;
    private Integer age;
    private String birthday;
    private String[] major;
    private boolean has_girl_friend;
    private String car;
    private String house;
    private String comment;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getBirthday() {
        return birthday;
    }

    public void setBirthday(String birthday) {
        this.birthday = birthday;
    }

    public String[] getMajor() {
        return major;
    }

    public void setMajor(String[] major) {
        this.major = major;
    }

    public boolean isHas_girl_friend() {
        return has_girl_friend;
    }

    public void setHas_girl_friend(boolean has_girl_friend) {
        this.has_girl_friend = has_girl_friend;
    }

    public String getCar() {
        return car;
    }

    public void setCar(String car) {
        this.car = car;
    }

    public String getHouse() {
        return house;
    }

    public void setHouse(String house) {
        this.house = house;
    }

    public String getComment() {
        return comment;
    }

    public void setComment(String comment) {
        this.comment = comment;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", birthday='" + birthday + '\'' +
                ", major=" + Arrays.toString(major) +
                ", has_girl_friend=" + has_girl_friend +
                ", car='" + car + '\'' +
                ", house='" + house + '\'' +
                ", comment='" + comment + '\'' +
                '}';
    }
}

3.编写GsonSample解析类

package com.wxd.basic.gson;

import com.google.gson.FieldNamingStrategy;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

import java.lang.reflect.Field;

public class GsonSample {
    public static void main(String[] args){
        Student s=new Student();
        s.setName("张三");
        s.setAge(23);
        s.setBirthday("1995-06-30");
        s.setMajor(new String[]{"打球","看书"});
        s.setHas_girl_friend(false);
        s.setCar(null);
        s.setHouse(null);
        s.setComment("这是一个注释!");

        GsonBuilder gsonBuilder=new GsonBuilder();        //gsonBuilder.setDateFormat("yyyy-MM-dd").create();日期格式转换
        gsonBuilder.setPrettyPrinting();//这样设置后通过GsonBuilder构建的Gson对象打印出来是美化过的json格式数据
        gsonBuilder.setFieldNamingStrategy(new FieldNamingStrategy() {
            @Override
            public String translateName(Field field) {
                if(field.getName().equals("name")){
                    return "NAME";//修改了name属性
                }
                return field.getName();
            }
        });
        Gson gson=gsonBuilder.create();
//      Gson gson=new Gson();
        System.out.println(gson.toJson(s));
    }
}

4.控制台输出

①通过new Gson()的方式构建后的打印输出:{"name":"张三","age":23,"birthday":"1995-06-30","major":["打球","看书"],"has_girl_friend":false,"comment":"这是一个注释!"}②通过GsonBuilder的方式构建Gson对象后输出:

  {
  "NAME": "张三",
  "age": 23,
  "birthday": "1995-06-30",
  "major": [
     "打球",
    "看书"
  ],
  "has_girl_friend": false,
  "comment": "这是一个注释!"
  }

5.使用Gson解析json格式数据:

package com.wxd.basic.gson;

import com.google.gson.Gson;
import org.apache.commons.io.FileUtils;

import java.io.File;
import java.io.IOException;

public class GsonReadSample {
    public static void main(String[] args){
        File file=new File(GsonReadSample.class.getResource("/Student.json").getFile());
        try {
            String content = FileUtils.readFileToString(file);//如果不知道怎么读文件可以自己手动写个json字符串如下(把这行注释掉,下面的放开就行):
//            String content="{\n" +
//                    "  \"NAME\": \"张三\",\n" +
//                    "  \"age\": 23,\n" +
//                    "  \"birthday\": \"1995-06-30\",\n" +
//                    "  \"major\": [\n" +
//                    "    \"打球\",\n" +
//                    "    \"看书\"\n" +
//                    "  ],\n" +
//                    "  \"has_girl_friend\": false,\n" +
//                    "  \"comment\": \"这是一个注释!\"\n" +
//                    "}";
            Gson gson=new Gson();
            Student student = gson.fromJson(content, Student.class);
            System.out.println(student);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

6.控制台输出:

Student{name='null', age=23, birthday='1995-06-30', major=[打球, 看书], has_girl_friend=false, car='null', house='null', comment='这是一个注释!'}
点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
3年前
java中常见的json解析方法、库以及性能对比
常见的json解析有原生的JSONObject和JSONArray方法,谷歌的GSON库,阿里的fastjson,还有jackson,jsonlib。Gson(项目地址:https://github.com/google/gson)。Gson是目前功能最全的Json解析神器,Gson当初是为因应Google公司内部需求而由Google自行研发
Karen110 Karen110
3年前
一篇文章带你了解JavaScript日期
日期对象允许您使用日期(年、月、日、小时、分钟、秒和毫秒)。一、JavaScript的日期格式一个JavaScript日期可以写为一个字符串:ThuFeb02201909:59:51GMT0800(中国标准时间)或者是一个数字:1486000791164写数字的日期,指定的毫秒数自1970年1月1日00:00:00到现在。1\.显示日期使用
Wesley13 Wesley13
3年前
java将前端的json数组字符串转换为列表
记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表。前端数据转化与请求varcontracts{id:'1',name:'yanggb合同1'},{id:'2',name:'yanggb合同2'},{id:'3',name:'yang
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
暗箭伤人 暗箭伤人
1年前
【www.ithunter.club】 20230922下午
不容易的2023年,我们一起努力【www.ithunter.club】(2023092208:00:00.8872062023092216:00:00.887206)1.人事招聘专员数名(可选远程或入职)2.招聘向坐标东京Yahoo、Shift、L
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这