Jackson是一個(gè)用于Java對(duì)象和JSON數(shù)據(jù)之間快速映射的輕量級(jí)庫(kù)。它可以輕松地進(jìn)行序列化和反序列化Java對(duì)象和JSON數(shù)據(jù),支持復(fù)雜JSON數(shù)據(jù)的讀取和解析。以下是使用Jackson解析復(fù)雜JSON的步驟。
1.引入Jackson庫(kù)
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.10.2</version>
</dependency>
2.創(chuàng)建Java對(duì)象以接收J(rèn)SON數(shù)據(jù):
public class Person {
private String name;
private int age;
private List<String> hobbies;
// getter,setter方法
}
3.使用ObjectMapper類(lèi)解析JSON:
ObjectMapper mapper = new ObjectMapper();
String json = "{ \"name\":\"Tom\", \"age\":20, \"hobbies\":[\"reading\",\"running\"] }";
Person person = mapper.readValue(json, Person.class);
System.out.println(person.getName());
將JSON數(shù)據(jù)轉(zhuǎn)換為Java對(duì)象后,我們可以使用Java對(duì)象操作數(shù)據(jù)。上面的代碼中,我們輸出了person的姓名。
如果JSON數(shù)據(jù)更加復(fù)雜,包含多個(gè)對(duì)象或數(shù)組,則需要使用嵌套對(duì)象和數(shù)組。
比如,JSON數(shù)據(jù):
{
"persons":[
{
"name":"Tom",
"age":20,
"hobbies":["reading","running"]
},
{
"name":"Lucy",
"age":25,
"hobbies":["swimming","cooking"]
}
]
}
對(duì)應(yīng)的Java類(lèi),需要添加一個(gè)persons字段,類(lèi)型為L(zhǎng)ist<Person>:
public class PersonList {
private List<Person> persons;
// getter,setter方法
}
然后使用ObjectMapper解析JSON:
ObjectMapper mapper = new ObjectMapper();
String json = "{ \"persons\":[{ \"name\":\"Tom\", \"age\":20, \"hobbies\":[\"reading\",\"running\"] }, { \"name\":\"Lucy\",\"age\":25, \"hobbies\":[\"swimming\",\"cooking\"] }] }";
PersonList personList = mapper.readValue(json, PersonList.class);
System.out.println(personList.getPersons().get(0).getName());
我們可以通過(guò)調(diào)用PersonList對(duì)象的getPersons()方法來(lái)獲取所有的Person對(duì)象。上面的代碼中,我們輸出了第一個(gè)Person對(duì)象的姓名。
這就是使用Jackson解析復(fù)雜JSON的步驟,可以根據(jù)需要,使用不同的Java對(duì)象接收不同的JSON數(shù)據(jù)。