最新消息:欢迎访问Android开发中文站!商务联系微信:loading_in

五分钟搞懂Gson的用法

新手入门 AndroidChina 7496浏览 0评论

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

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

小编还是喜欢Google的Gson。

使用场景:

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


Logger logger = Logger.getLogger(CommonAction.class);

Gson g = new Gson();

logger.info(“return:”+g.toJson(map));

用法举例:

1基础用法toJson

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


Gson gson = new Gson();

List persons = new ArrayList();

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换属性名字

public class SomeClassWithFields {
   @SerializedName("name") private final String someField;
   private final String someOtherField;

   public SomeClassWithFields(String a, String b) {
     this.someField = a;
     this.someOtherField = b;
   }
 }
SomeClassWithFields objectToSerialize = new SomeClassWithFields("a", "b");
 Gson gson = new Gson();
 String jsonRepresentation = gson.toJson(objectToSerialize);
 System.out.println(jsonRepresentation);

 ===== OUTPUT =====
 {"name":"a","someOtherField":"b"}

6加版本号

public class User {
  private String firstName;
  private String lastName;
  @Since(1.0) private String emailAddress;
  @Since(1.0) private String password;
  @Since(1.1) private Address address;
}

7泛型的用法

  HashMap<String, Book> booksMap = gson.fromJson(result, new TypeToken<HashMap>String, Book>() { }.getType());

转载请注明:Android开发中文站 » 五分钟搞懂Gson的用法

您必须 登录 才能发表评论!