欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Gson基本用法

程序员文章站 2022-04-04 12:31:04
...
Gson版本:2.3.1
pom:
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.3.1</version>
</dependency>


1.基本用法
使用new Gson()或使用GsonBuilder.create方法创建Gson对象,然后使用toJson方法序列化或使用fromJson反序列化。
Person person = new Person();
//初始化...
Gson gson = new Gson();
gson.toJson(person);


2.TypeAdapter用法
当需要对对象属性做特殊转换时,可以使用TypeAdapter进行适配,示例如下:
NameAdapter.java
public class NameAdapter extends TypeAdapter<String> {

	@Override
	public void write(JsonWriter out, String value) throws IOException {
		if (value != null && !"".equals(value)) {
			String[] values = value.split(" ");
			out.beginObject();
			out.name("First Name").value(values[0]);
			out.name("Last Name").value(values[1]);
			out.endObject();
		}
	}

	@Override
	public String read(JsonReader in) throws IOException {
		in.beginObject();
		StringBuilder sb = new StringBuilder();
		in.nextName();
		sb.append(in.nextString()).append(" ");
		in.nextName();
		sb.append(in.nextString());
		in.endObject();
		return sb.toString();
	}

}

Person.java
public class Person {
	@JsonAdapter(NameAdapter.class)
	private String name;
//其它属性和get、set方法省略
}

GsonTest.java
GsonBuilder builder = new GsonBuilder();
Gson gson = builder.create();

Person person = new Person();
person.setName("Will Smith"); // 拆分成{"First Name":"Will","Last Name":"Smith"}
person.setAge(40);
person.setCountry("America");

String json = gson.toJson(person);
System.out.println(json);

最后打印结果:{"name":{"First Name":"Will","Last Name":"Smith"},"country":"America","age":40}

3.ExclusionStrategy用法
当用户需要自定义序列化策略时,可以使用ExclusionStrategy进行定义,并在GsonBuilder创建Gson之前设置ExclusionStrategy。下面的例子是使用ExclusionStrategy实现@Ignore注解,使用该注解标注的属性不会进行序列化。
IgnoreStrategy.java
public class IgnoreStrategy implements ExclusionStrategy {

	@Override
	public boolean shouldSkipField(FieldAttributes f) {
		return f.getAnnotation(Ignore.class) != null;
	}

	@Override
	public boolean shouldSkipClass(Class<?> clazz) {
		return false;
	}

}

Ignore.java
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Ignore {
}

Person.java
public class Person {
	@Ignore
	private String privacy;
//其它属性和get、set方法省略
}

GsonTest.java
public static void main(String[] args) {
		GsonBuilder builder = new GsonBuilder();
		builder.addSerializationExclusionStrategy(new IgnoreStrategy());
		Gson gson = builder.create();

		Person person = new Person();
		person.setName("Will Smith"); // 拆分成{"First Name":"Will","Last Name":"Smith"}
		person.setAge(40);
		person.setCountry("America");
		person.setPrivacy("Something privacy"); // 不会被序列化

		String json = gson.toJson(person);
		System.out.println(json);

		Person newPerson = gson.fromJson(json, Person.class);
		System.out.println(newPerson);
	}

输出结果:{"name":{"First Name":"Will","Last Name":"Smith"},"country":"America","age":40}

源码见附件
其它用法,待续。。。
相关标签: java json gson