用Jackson解析深度嵌套的JSON属性

我试图找到一种从的有效载荷中解析嵌套属性的干净方法API

这是JSON有效负载的粗略概括:

{

"root": {

"data": {

"value": [

{

"user": {

"id": "1",

"name": {

"first": "x",

"last": "y"

}

}

}

]

}

}

}

我的目标是拥有User具有firstNamelastName字段的对象数组。

有人知道干净地解析此内容的好方法吗?

现在,我正在尝试创建一个Wrapper类,并在其中创建一个用于数据,值,用户等的静态内部类。

restTemplate.exchange()用来呼叫端点。

回答:

您需要使用JsonPath库,该库仅允许您选择必填字段,然后可以Jackson将原始数据转换为POJO类。解决方案示例如下所示:

import com.fasterxml.jackson.annotation.JsonProperty;

import com.fasterxml.jackson.databind.ObjectMapper;

import com.fasterxml.jackson.databind.type.CollectionType;

import com.jayway.jsonpath.JsonPath;

import java.io.File;

import java.util.List;

import java.util.Map;

public class JsonPathApp {

public static void main(String[] args) throws Exception {

File jsonFile = new File("./resource/test.json").getAbsoluteFile();

List<Map> nodes = JsonPath.parse(jsonFile).read("$..value[*].user.name");

ObjectMapper mapper = new ObjectMapper();

CollectionType usersType = mapper.getTypeFactory().constructCollectionType(List.class, User.class);

List<User> users = mapper.convertValue(nodes, usersType);

System.out.println(users);

}

}

class User {

@JsonProperty("first")

private String firstName;

@JsonProperty("last")

private String lastName;

public String getFirstName() {

return firstName;

}

public void setFirstName(String firstName) {

this.firstName = firstName;

}

public String getLastName() {

return lastName;

}

public void setLastName(String lastName) {

this.lastName = lastName;

}

@Override

public String toString() {

return "User{" +

"firstName='" + firstName + '\'' +

", lastName='" + lastName + '\'' +

'}';

}

}

上面的代码打印:

[User{firstName='x', lastName='y'}]

以上是 用Jackson解析深度嵌套的JSON属性 的全部内容, 来源链接: utcz.com/qa/434036.html

回到顶部