JSON中提供了常用的对象和json数据间的转换方法。
JSONObject可以看作Map,使用key-value构建json对象。
JSONArray可以看作List,使用List可以简单构造json数组对象。
1.pom.xml中引入依赖
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2</artifactId>
<version>2.0.29</version>
</dependency>
2.准备实体类
import com.alibaba.fastjson2.annotation.JSONField;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import java.util.Date;
@Slf4j
@Data
public class Person {
@JSONField(name="AGE", serialize=false)
private int age;
@JSONField(name="LAST NAME", ordinal = 2)
private String lastName;
@JSONField(name="FIRST NAME", ordinal = 1)
private String firstName;
@JSONField(name="DATE OF BIRTH", format="dd/MM/yyyy", ordinal = 3)
private Date dateOfBirth;
public Person() {
}
public Person(int age, String lastName, String firstName, Date dateOfBirth) {
this.age = age;
this.lastName = lastName;
this.firstName = firstName;
this.dateOfBirth = dateOfBirth;
}
}
3.准备测试类
import com.test.fastjson.to.Person;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.alibaba.fastjson2.filter.NameFilter;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import static org.junit.jupiter.api.Assertions.assertEquals;
@Slf4j
class TestTest {
private List<Person> listOfPersons = new ArrayList<>();
@BeforeEach
public void setUp() {
listOfPersons.add(new Person(15, null,"Doe", new Date()));
listOfPersons.add(new Person(20, "Janette Doe", "Kobe", new Date()));
}
/**
* convert object to json String.
*/
@Test
public void whenJavaList_thanConvertToJsonCorrect() {
String jsonOutput= JSON.toJSONString(listOfPersons);
log.info(jsonOutput);
}
/**
* json string to object
*/
@Test
public void whenJson_thanConvertToObjectCorrect() {
Person person = new Person(20, "John", "Doe", new Date());
String jsonObject = JSON.toJSONString(person);
Person newPerson = JSON.parseObject(jsonObject, Person.class);
assertEquals(newPerson.getAge(), 0); // 如果我们设置系列化为 false
assertEquals(newPerson.getFirstName(), listOfPersons.get(0).getFirstName());
}
/**
* how to use JSONObject and JSONArray
*/
@Test
public void whenGenerateJson_thanGenerationCorrect() {
JSONArray jsonArray = new JSONArray();
for (int i = 0; i < 2; i++) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("AGE", 10);
jsonObject.put("FULL NAME", "Doe " + i);
jsonObject.put("DATE OF BIRTH", "2016/12/12 12:12:12");
jsonArray.add(jsonObject);
}
String jsonOutput = jsonArray.toJSONString();
log.info(jsonOutput);
}
/**
* define NameFilter
*/
@Test
public void givenSerializeConfig_whenJavaObject_thanJsonCorrect() {
NameFilter formatName = new NameFilter() {
public String process(Object object, String name, Object value) {
return name.toLowerCase().replace(" ", "_");//FIRST NAME ---> first_name
}
};
String jsonOutput = JSON.toJSONString(listOfPersons, formatName);
log.info(jsonOutput);
}
}