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>() { }.
  • 相关阅读:
    time 模块学习
    day 14 自定义模块,常用模块 time .datetime ,time 模块
    day 13 课后作业
    day 12 课后作业
    day 11课后作业
    树状数组最值
    hdu 1059 Dividing bitset 多重背包
    XVII Open Cup named after E.V. Pankratiev. XXI Ural Championship
    最长公共子序列板/滚动 N^2
    Uva 10635
  • 原文地址:https://www.cnblogs.com/dirgo/p/9474832.html
Copyright © 2011-2022 走看看