gpt4 book ai didi

java - 将嵌套 json 映射到 java 字段,无需写入容器名称

转载 作者:行者123 更新时间:2023-12-02 11:34:03 24 4
gpt4 key购买 nike

我有一个休息端点,它返回一个 3 级嵌套 json,如下所示:

 {
"user":{
"departament":{
"departInfo":{
"departName":"String"
}
}
}
}

我有一个 java/groovy 类,没有相同的 3 个嵌套级别:

@JsonIgnorePropertires("ignoreUnknown = true")
class User(){
String departName
}

当我使用restTemplate进行休息调用时:

User response = restTemplate.exchange(url, HttpMethod.GET,
request, User.class)

即使使用 json 忽略属性,jackson 也不会映射字段 DepartName (因为我猜它不在同一嵌套级别)。我已经用这段代码解决了我的问题:

@JsonIgnorePropertires("ignoreUnknown = true")
class User(){
String departName;

@JsonProperty("department")
private void mapDepartmentName(Map<String,Object department) {
this.departName = ((Map<String,String>)department.get("departInfo")).get("departName");
}
}

它工作得很好,但我不太喜欢它,因为我仍然需要写容器的名称。我可以以某种方式解决这个问题(不一定需要与 Jackson 一起),而无需显式编写无用且不必要的容器嵌套 json 吗?即使容器的名称发生变化,我也想避免更改我的代码。代码是java/groovy。

最佳答案

添加 JsonPath 作为依赖项(假设 Maven):

 <dependency>
<groupId>com.jayway.jsonpath</groupId>
<artifactId>json-path</artifactId>
<version>2.3.0</version>
</dependency>

您只需获取 json 字符串并使用 JsonPath 处理它即可:

String json = "...";
List<String> departNames = JsonPath.read(json, "$..departName");
String firstDepartName = JsonPath.read(json, "$..departName[0]");

由于这是 json 树解析和遍历引擎,我强烈怀疑它的性能会低于 Jackson(值得测试),但这为您提供了很多其他机会来灵活处理 json 字符串。

关于java - 将嵌套 json 映射到 java 字段,无需写入容器名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49083762/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com