• GSON的使用


    Gson(A Java serialization/deserialization library to convert Java Objects into JSON and back)
    是 Google 提供的用来在 Java 对象和 JSON 数据之间进行映射的 Java 类库。可以将一个 JSON 字符串转成一个 Java 对象,或者反过来。

     1. Gson Goals

      • 提供简单的toJson()fromJson()方法的Java对象转换为JSON,反之亦然
      • 允许将先前存在的不可修改对象转换为JSON或从JSON转换
      • 广泛的Java泛型支持
      • 允许对象的自定义表示
      • 支持任意复杂的对象(具有深层继承层次结构和泛型类型的广泛使用)

     2. GSON生成JSON数据

    2.1 首先在pom.xml加入依赖(Maven创建)

    <dependency>
        <groupId>com.google.code.gson</groupId>
        <artifactId>gson</artifactId>
        <version>2.8.0</version>
    </dependency>

    2.2 为JavaBean实例赋值之后,生成Gson对象,并利用toJson(object)方法将数据转换为json格式

    import com.google.gson.Gson;
    public class GsonCreateSimple {
        public static void main(String[] args) {
            //1.创建Person对象,利用set()方法赋值
            Person xiaofeng=new Person();
            xiaofeng.setName("小峰");
            xiaofeng.setAge(22.5);
            xiaofeng.setGirlfriend(true);
            xiaofeng.setMajor(new String[]{"唱歌","coding"});
            
            //2.创建一个Gson对象,并利用toJson(object)方法将数据转换为json格式
            Gson gson =new Gson();
            System.out.println(gson.toJson(xiaofeng));
        }    
    }

    输出Json格式:

    2.3 修正的方法 tips

      2.3.1 @SerializedName注解

      有时需要在输出的Json数据中显示自己想要的效果而不能直接修改JavaBean属性名称时(比如上例想要将 "name" 转换为 “名字” 输出在控制台),可以在JavaBean类里想要转换的属性前加上该注解@SerializedName(“想要显示的内容”)。

    上例:修改Person类,在属性“name”前加上注解

    控制台输出:

      2.3.2 GsonBuilder(用于对json数据美化,或者个性化输出)

    public class GsonCreateSimple {
    
        public static void main(String[] args) {
            //1.创建Person对象,利用set()方法赋值
            Person xiaofeng=new Person();
            xiaofeng.setName("小峰");
            xiaofeng.setAge(22.5);
            xiaofeng.setGirlfriend(true);
            xiaofeng.setMajor(new String[]{"唱歌","coding"});  
          
    //2.创建一个Gson对象,并利用toJson(object)方法将数据转换为json格式 //Gson gson =new Gson(); GsonBuilder gsonBuilder=new GsonBuilder(); gsonBuilder.setPrettyPrinting(); //将json数据按层次格式输出,更直观,常用于调试 //为json数据输出添加逻辑 gsonBuilder.setFieldNamingStrategy(new FieldNamingStrategy() { public String translateName(Field field) { if(field.getName().equals("age")){ return "今年多大了啊:"; } return field.getName(); } });
    Gson gson
    =gsonBuilder.create(); System.out.println(gson.toJson(xiaofeng)); } }

    该demo将json数据结构化输出,并将属性 “age”个性化输出:

                

    注意:输出json数据时,会将属性名输出,如果不想输出该属性,可在声明属性时使用transient修饰,这样即使赋值也不会输出了

    private transient String ignore;
    3. GSON 解析

    JSONObject可以将*.json文件解析成一个它的对象;Gson可以正向的生成,也可以解析成自己定义的一个JavaBean的对象。
    xiaofeng.json
    {"birthday":"1999-11-22","girlfriend":"true","major":["sing","coding"],"school":"Qinghua University","car":null,"name":"小峰","comment":"JSON里不能直接使用注释,需要添加时可通过此方式。。","age":22}
    解析demo:ReadGson.java
    public class ReadGson {
        public static void main(String[] args) throws IOException {
    // 获取本文件路径下的json文件 File file = new File(ReadJSON.class.getResource("/xiaofeng.json").getFile()); // 读取json文件内容 String content = FileUtils.readFileToString(file);
    //生成Gson对象,利用其fromJson(String json,Class<T> class)方法来解析Json数据,生成JavaBean对象 Gson gson =new Gson(); Person xiaofeng=gson.fromJson(content, Person.class); //输出对象,此处JavaBean类有toString()方法,故可直接打印 System.out.println(xiaofeng); } }

    注意:此处需要Person类的属性和解析的 xiaofeng.json内的 key相对应。

     4. GSON解析特殊格式(相较于JSON的优势所在)

     4.1 带日期转换

    在JSON里Date格式需要设置为String类型,而在Gson里是可以忽略这个问题的

    下面demo中,在 PersonByGson类里Birthday的属性为Date类型的,解析时再设置显示的格式

                

         // 获取本文件路径下的json文件
            File file = new File(ReadJSON.class.getResource("/xiaofeng.json").getFile());
            // 读取json文件内容
            String content = FileUtils.readFileToString(file);
            //生成Gson对象,利用其fromJson(String json,Class<T> class)方法来解析Json数据
            //Gson gson =new Gson();
            
            Gson gson =new GsonBuilder().setDateFormat("yyyy-MM-dd").create();//这里通过创建GsonBuild对象来设置格式
            PersonByGson xiaofeng=gson.fromJson(content, PersonByGson.class);
     
            //输出日期    toLocaleString()
            System.out.println(xiaofeng.getBirthday().toLocaleString());

    输出日期格式:

                    

     4.2 集合类解析

    将JavaBean类中数组格式属性转换为List 集合属性(注意相应修改setXx()和getXx()和toString()方法)

                  

    直接输出(解析程序同上,自动匹配相应的ArrayList,属性是Set格式的话是LinkedHashSet):

             

    5. 对JSON库作一总结:

    功能:映射Java Object与json格式数据

      1.通过Annotation注解来声明
      2.支持自定义属性名称
      3.支持包含或排除属性
      4.支持自定义接口自己完成解析/生成过程

    https://github.com/google/gson

  • 相关阅读:
    Docker决战到底(三) Rancher2.x的安装与使用
    golang实现给图片加水印
    golang实现图片水印效果
    百度ueditor 编辑器使用问题收集
    重要的文件和数据,别放在/tmp下
    在CentOS 7上切换默认的java版本
    [转载]Centos和RedHat的区别和联系
    在Excel的公式框内输入换行符
    Outlook打不开,报错信息为“The time limit for logging on was reached while waiting for system resources. Try again. MAPI 1.0 [000004C2]”
    VMXNET3与E1000E与E1000的比较
  • 原文地址:https://www.cnblogs.com/zjfjava/p/6887829.html
Copyright © 2020-2023  润新知