Java 将JSON的一部分返回到对象Spring boot中

Java 将JSON的一部分返回到对象Spring boot中,java,json,spring-boot,Java,Json,Spring Boot,我有这样的JSON结构 { "name":"John", "age":27, "company":{ "company_name":"ACME LLC", "address": "1st Street", "country": "US&q

我有这样的JSON结构

{
    "name":"John",
    "age":27,
    "company":{
        "company_name":"ACME LLC",
        "address": "1st Street",
        "country": "US"
    }
}
我知道如果我想把它映射到java对象,我需要某种映射器,我已经做到了

我的问题是:有没有办法只将这个json的一部分映射到对象中。我只想将json的
公司
部分映射到对象中。还有一件事,我正在使用Java11和SpringBoot,我可以访问Jackson的对象映射器


编辑:如果有方法导航到此对象,也可以。例如,
$.company

我认为最简单的方法是创建两个模型类。首先是一个字段:

@Data
public class Model {

private Company company;

}
第二:

@Data
public class Company {

  @JsonProperty("company_name")
  private String companyName;
  
  private String address;
  
  private String country;

}

然后您可以使用Jackson mapper。您不需要在模型类中提及“地图”和“年龄”字段。

好的,我找到了一个答案,谢谢@Jakub对您的答案的帮助

这是基于我的问题的答案代码示例:

public class Company {

    private String name;
    private String address;
    private String country;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public String getCountry() {
        return country;
    }

    public void setCountry(String country) {
        this.country = country;
    }
}
测试方法/执行:

   @Test
    public void testJSON() throws JsonProcessingException {
        JsonNode productNode = objectMapper.readTree("{\n" +
                "    \"name\":\"John\",\n" +
                "    \"age\":27,\n" +
                "    \"company\":{\n" +
                "        \"name\":\"ACME LLC\",\n" +
                "        \"address\": \"1st Street\",\n" +
                "        \"country\": \"US\"\n" +
                "    }\n" +
                "}");

        Company company = objectMapper.readValue(productNode.get("company").toString(), Company.class);

        System.out.println(company.getAddress());
    }
我建议使用图书馆

在yaml文件中定义映射,您只想在公司字段中定义映射。因此,您的映射文件如下所示

result:
  type: object
  path: /company
  fields:
    name:  # read value from field in path 
       path: company_name 
    address:  #field name is the same
    country:
要读取文件的Java代码:

DSM dsm=new DSMBuilder(new File("path/to/mapping.yaml")).create();
Map<String,Object> result=  (    Map<String,Object>)dsm.toObject(jsonData);
要反序列化的Java代码:

DSM dsm=new DSMBuilder(new File("path/to/mapping.yaml")).create();
Company result= dsm.toObject(jsonData,Company.class);

所以唯一的办法就是上两节课?我真的需要一门课:)。@laban007你可以从那个教程中尝试一些东西:尽管我从来没有做过。如果限制文件对你来说很重要,你也可以使用静态类。链接与你的原始答案结合起来真的很有帮助。我现在已经发布了工作代码示例。非常感谢。哇,太棒了。我同意最初的答案,但这也是一个杀手。谢谢
DSM dsm=new DSMBuilder(new File("path/to/mapping.yaml")).create();
Company result= dsm.toObject(jsonData,Company.class);