添加依赖
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>
2.4
</version>
</dependency>
|
1.将一个对象转成Json
我们可以用Gson对象toJson方法生成
@Test
public
void
Test1(){
User zhangSan=
new
User();
zhangSan.setAge(
12
);
zhangSan.setArea(
"北京"
);
zhangSan.setSex(
1
);
zhangSan.setName(
"张三"
);
Gson gson =
new
Gson();
System.out.println(gson.toJson(zhangSan));
}
|
结果:
{
"name": "张三",
"sex": 1,
"area": "北京",
"age": 12
}
2.关键字,如需替换,可以使用注解
@SerializedName("xxxx")字段名称会被替换成注解的名字,一下就解决了需求。
比如,我们现将name:"张三",换成Name:"张三"
可以这样
@SerializedName
(
"Name"
)
private
String name;
private
int
sex;
private
String area;
private
int
age;
|
结果
{
"Name": "张三",
"sex": 1,
"area": "北京",
"age": 12
}
3.GsonBulider 使用
主要功能:
- 1.serializeNulls:把json中的””,转换为null;
- 2. setPrettyPrinting:把json无格式字符串转换为带格式的字符串
@Test
public
void
Test2(){
User zhangSan=
new
User();
zhangSan.setAge(
12
);
zhangSan.setArea(
"北京"
);
zhangSan.setSex(
1
);
zhangSan.setName(
"张三"
);
GsonBuilder gsonBuilder=
new
GsonBuilder();
gsonBuilder.setPrettyPrinting();
Gson gson=gsonBuilder.create();
System.out.println(gson.toJson(zhangSan));
}
|
- 结果
- {
- "name": "张三",
- "sex": 1,
- "area": "北京",
- "age": 12
- }
- 3. setDateFormat("yyyy-MM-dd HH:mm:ss"):把解析后的是Date类型的字段格式都转换为yyyy-MM-dd HH:mm:ss类型
- 4. generateNonExecutableJson():生成的json字符串不具备正确格式的json字符串
- 5.excludeFieldsWithModifiers(Modifier.PRIVATE):Gson在解析时,把类中字段的PRIVATE访问权限排除,就是遇到private修饰的字段时,Gson不做解析;(还可以对有final,static等修饰的变量,或者修饰类的abstract,或者类是接口的等等,都可以做出控制解析)
代码
public
void
Test2(){
User zhangSan=
new
User();
zhangSan.setAge(
12
);
zhangSan.setArea(
"北京"
);
zhangSan.setSex(
1
);
zhangSan.setName(
"张三"
);
GsonBuilder gsonBuilder=
new
GsonBuilder();
gsonBuilder.excludeFieldsWithModifiers(Modifier.PRIVATE);
Gson gson=gsonBuilder.create();
System.out.println(gson.toJson(zhangSan));
}
|
- 6.excludeFieldsWithoutExposeAnnotation():主要是不解析@Expose修饰的字段。
- 7. setExclusionStrategies:Gson解析时,可以通过名字排除某些字段,也可以通过类型排除,不做解析;如Gson gson = newGsonBuilder().
- 8. setFieldNamingStrategy,自己可以设一些策略
@Test
public
void
Test4() {
User zhangSan =
new
User();
zhangSan.setAge(
12
);
zhangSan.setArea(
"北京"
);
zhangSan.setSex(
1
);
zhangSan.setName(
"张三"
);
GsonBuilder gsonBuilder =
new
GsonBuilder();
gsonBuilder.setFieldNamingStrategy(
new
FieldNamingStrategy() {
@Override
public
String translateName(Field field) {
if
(field.getName().equals(
"sex"
))
return
"SEX"
;
return
field.getName();
}
});
Gson gson = gsonBuilder.create();
System.out.println(gson.toJson(zhangSan));
}
|
- 结果:{"name":"张三","SEX":1,"area":"北京","age":12}
解析
fromJson(String,class)
第一个参数,我们要解析的json,第二个我们转成的类型
举例
@Test
public
void
Test5(){
Gson gson=
new
Gson();
User user=gson.fromJson(
"{\"name\":\"张三\",\"sex\":1,\"area\":\"北京\",\"age\":12}"
,User.
class
);
System.out.println(user);
}
|
结果:User{name='张三', sex=1, area='北京', age=12}
原则是:将json的key 和我们属性值一一进行对应,如果没有的话,就默认为null