原文地址:http://coladesign.cn/fast-understand-the-usage-of-gson/
谷歌gson这个Java类库可以把Java对象转换成JSON,也可以把JSON字符串转换成一个相等的Java对象。gson支持任意复杂Java对象包括没有源代码的对象。
其他的json解析库还有json-lib;Jackson;com.alibaba.fastjson
使用场景:
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注解 将A类MessageText中需要打印的字段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>() { }.