简单使用Gson
程序员文章站
2022-03-13 12:53:23
...
依赖:
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.20</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.5</version>
</dependency>
entity:
/**
* @author : lichenfei
* @date : 2018年12月20日
* @time : 下午3:46:07
*
*/
package com.lcf.entity;
import java.util.Date;
import lombok.AllArgsConstructor;
//import lombok.Data;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
/**
* @author : lichenfei
* @date : 2018年12月20日
* @time : 下午3:46:07
*
*/
//@Data
@Setter
@Getter
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class Person {
private String name;
private int age;
private Date birthday;
private String sex;
}
测试类:
/**
* @author : lichenfei
* @date : 2018年12月21日
* @time : 上午9:57:50
*
*/
package com.lcf.test;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.junit.Test;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.lcf.entity.Person;
/**
* @author : lichenfei
* @date : 2018年12月21日
* @time : 上午9:57:50
*
*
*/
public class GsonTest {
private static final Gson gson = new Gson();
/**
* bean转json
*
* 输出:{"name":"lcf","age":23,"birthday":"Dec 21, 2018 10:04:08 AM","sex":"m"}
*/
@Test
public void test1() {
Person per = new Person("lcf", 23, new Date(), "m");
System.out.println(gson.toJson(per));// 会自动处理值为null的属性
}
/**
* map转json
*
* {"list":[{"name":"lcf","age":23,"birthday":"Dec 21, 2018 10:08:59 AM","sex":"m"}]}
*/
@Test
public void test2() {
Map<String, Object> map = new HashMap<String, Object>();
List<Person> lists = new ArrayList<Person>();
lists.add(new Person("lcf", 23, new Date(), "m"));
map.put("list", lists);
System.out.println(gson.toJson(map));
}
/**
* json转bean
*
* Person(name=lcf, age=23, birthday=Fri Dec 21 10:04:08 CST 2018, sex=m)
*/
@Test
public void test3() {
String strJson = "{\"name\":\"lcf\",\"age\":23,\"birthday\":\"Dec 21, 2018 10:04:08 AM\",\"sex\":\"m\"}";
System.out.println(gson.fromJson(strJson, Person.class).toString());
}
/**
* 解析json(1)--->根据实体类进行解析
*/
@Test
public void test4() {
String json = "{\"name\":\"lcf\",\"age\":23,\"birthday\":\"Dec 21, 2018 10:08:59 AM\",\"sex\":\"m\"}";
Person person = new Gson().fromJson(json, Person.class);
System.out.println("name:" + person.getName());
System.out.println("age:" + person.getAge());
System.out.println("sex:" + person.getSex());
System.out.println("birthday:" + person.getBirthday());
/* 输出:
name:lcf
age:23
sex:m
birthday:Fri Dec 21 10:04:08 CST 2018*/
}
/**
* 解析json(2)--->直接访问:
*/
@Test
public void test5() {
String json = "{\"name\":\"lcf\",\"age\":23,\"birthday\":\"Dec 21, 2018 10:04:08 AM\",\"sex\":\"m\"}";
JsonObject jsonObject = (JsonObject) new JsonParser().parse(json);
System.out.println("name:" + jsonObject.get("name").getAsString());
System.out.println("age:" + jsonObject.get("age").getAsInt());
System.out.println("sex:" + jsonObject.get("sex").getAsString());
System.out.println("birthday:" + new Date(jsonObject.get("birthday").getAsString()).toString());
/* 输出:
name:lcf
age:23
sex:m
birthday:Fri Dec 21 10:04:08 CST 2018*/
}
/**
* GsonBuilder
*
*/
@Test
public void test6() {
Gson gson = new GsonBuilder()
//.serializeNulls() // 序列化时输出为null的属性值
.setDateFormat("yyyy-MM-dd HH:mm:ss")// 格式化日期
.create();
Map<String, Object> map = new HashMap<String, Object>();
List<Person> lists = new ArrayList<Person>();
lists.add(new Person("lcf", 23, new Date(), "m"));
map.put("list", lists);
map.put("title", "你好");
map.put("key", null);
// 输出: {"list":[{"name":"lcf","age":23,"birthday":"2018-12-21 11:24:58","sex":"m"}],"title":"你好"}
System.out.println(gson.toJson(map));
}
/*
* setFieldNamingPolicy
* 设置序列字段的命名策略(UPPER_CAMEL_CASE,UPPER_CAMEL_CASE_WITH_SPACES,
* LOWER_CASE_WITH_UNDERSCORES,LOWER_CASE_WITH_DASHES)
* addDeserializationExclusionStrategy
* 设置反序列化时字段采用策略ExclusionStrategy,如反序列化时不要某字段,当然可以采用@Expore代替。
* excludeFieldsWithoutExposeAnnotation 设置没有@Expore则不序列化和反序列化
* addSerializationExclusionStrategy 设置序列化时字段采用策略,如序列化时不要某字段,当然可以采用@Expore代替。
* registerTypeAdapter 为某特定对象设置固定的序列和反序列方式,实现JsonSerializer和JsonDeserializer接口
* setFieldNamingStrategy 设置字段序列和反序列时名称显示,也可以通过@Serializer代替 setPrettyPrinting
* 设置gson转换后的字符串为一个比较好看的字符串 setDateFormat 设置默认Date解析时对应的format格式
*/
}
…新人,有什么问题多多指导.