Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将嵌套的json映射到java字段,而不写入容器名称_Java_Json_Spring Boot_Groovy_Jackson - Fatal编程技术网

将嵌套的json映射到java字段,而不写入容器名称

将嵌套的json映射到java字段,而不写入容器名称,java,json,spring-boot,groovy,jackson,Java,Json,Spring Boot,Groovy,Jackson,我有一个rest端点,它返回3级嵌套json,如下所示: { "user":{ "departament":{ "departInfo":{ "departName":"String" } } } } 我有一个java/groovy类,没有相同的3个嵌套级别: @JsonIgnorePropertires("ignoreUnknown = true") class User(){ Stri

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

 {
   "user":{
      "departament":{
         "departInfo":{
            "departName":"String"
         }
      }
   }
}
我有一个java/groovy类,没有相同的3个嵌套级别:

@JsonIgnorePropertires("ignoreUnknown = true")
class User(){
    String departName
}
当我使用restTemplate进行rest调用时:

User response = restTemplate.exchange(url, HttpMethod.GET,
                                      request, User.class)
jackson没有映射字段departName,因为即使使用json ignore属性,它也不在同一嵌套级别。我已使用此代码解决了我的问题:

@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字符串的机会

尝试json路径$..departname确切位置在哪里?在map方法中?你能写一些代码吗?为什么这个标记为[groovy]我看不到groovy位?上面所有的代码都是groovy,如果有,我可以使用groovy json解决方案。对不起,当你说java类没有相同的3个嵌套级别时,我很困惑