zoukankan      html  css  js  c++  java
  • [转]快速搞懂Gson的用法

    原文地址:http://coladesign.cn/fast-understand-the-usage-of-gson/

    谷歌gson这个Java类库可以把Java对象转换成JSON,也可以把JSON字符串转换成一个相等的Java对象。gson支持任意复杂Java对象包括没有源代码的对象。

    其他的json解析库还有json-lib;Jackson;com.alibaba.fastjson

    使用场景:

    Java对象和json字符串的相互转换;日志输出。

     

    Logger logger = Logger.getLogger(CommonAction.class);
     
    gson g = newgson();
     
    logger.info(“return:”+g.toJson(map));
     

    用法举例:

    1、基础用法toJson

    toJason()方法将对象转换成Json字符串

     

    gson gson = newgson();
     
    List persons = newArrayList();
     
    String str = gson.toJson(persons);
     

    2、基础用法:fromJson()

    gson提供了fromJson()方法来实现从Json字符串转化为到Java实体的方法。

    比如json字符串为:[{“name”:”name0”,”age”:0}]

     

    Person person = gson.fromJson(str, Person.class);
     

    提供两个参数,分别是json字符串以及需要转换对象的类型。

    3、避免Unicode转义

    例如:
    {"s":"u003c"}
    我只想简单的打印成这样
    {"s":"<"}
    解决方案:
    我只需要 disable HTML escaping.
    Gson gson = new GsonBuilder().disableHtmlEscaping().create();

    4、排除某些字段

    如果一个类A中含有字段field1,它的父类也含有字段field1,那么A对象toJson的时候,就会发生declares multiple JSON fields named field1
    解决方案1:在类A中去掉字段filed1.
    解决方案2:使用Json@Expose注解
    AMessageText中需要打印的字段filed1加上注解@Expose 。那么父类中没有加注解的field1就会被排除掉。
    Gson g = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();

    5、换属性名字

    publicclassSomeClassWithFields {
       @SerializedName("name") privatefinalString someField;
       privatefinalString someOtherField;
     
       publicSomeClassWithFields(String a, String b) {
         this.someField = a;
         this.someOtherField = b;
       }
     }
    SomeClassWithFields objectToSerialize = newSomeClassWithFields("a", "b");
     gson gson = newgson();
     String jsonRepresentation = gson.toJson(objectToSerialize);
     System.out.println(jsonRepresentation);
     
     ===== OUTPUT =====
     {"name":"a","someOtherField":"b"}
     

    6、加版本号

    publicclassUser {
      privateString firstName;
      privateString lastName;
      @Since(1.0) privateString emailAddress;
      @Since(1.0) privateString password;
      @Since(1.1) privateAddress address;
    }
     

    7、泛型的用法

     
    HashMap<String, Book> booksMap = gson.fromJson(result, newTypeToken<HashMap>String, Book>() { }.
  • 相关阅读:
    融云会话界面导航上移-使用IQKeyboardManager
    App调用safar
    info.plist 安全登录
    could not find developer disk image
    easyExcel使用以及踩过的坑
    springBoot配置文件详解
    jvm面试题(纯手撸)
    面试题
    设计模式之观察者模式(Observer)
    设计模式之模板方法(TemplateMethod)
  • 原文地址:https://www.cnblogs.com/dirgo/p/9474832.html
Copyright © 2011-2022 走看看