用Jackson解析深度嵌套的JSON属性
我试图找到一种从的有效载荷中解析嵌套属性的干净方法API
。
这是JSON
有效负载的粗略概括:
{ "root": {
"data": {
"value": [
{
"user": {
"id": "1",
"name": {
"first": "x",
"last": "y"
}
}
}
]
}
}
}
我的目标是拥有User
具有firstName
和lastName
字段的对象数组。
有人知道干净地解析此内容的好方法吗?
现在,我正在尝试创建一个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