Java 将JSON的一部分返回到对象Spring boot中
我有这样的JSON结构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
{
"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);