Java 如何从json响应中获取特定对象
我收到一个来自第三方服务的响应,如下所示:Java 如何从json响应中获取特定对象,java,json,response,resttemplate,mapper,Java,Json,Response,Resttemplate,Mapper,我收到一个来自第三方服务的响应,如下所示: { "field1": "string", "field2": "string", "objectList": [ { "object1": { "field11": "string",
{
"field1": "string",
"field2": "string",
"objectList": [
{
"object1": {
"field11": "string",
"field12": "string",
"field13": "string",
"field14": "string",
},
"object2": {
"field21": "string",
"field22": "string",
"field23": "string",
},
"object3": {
"field31": "string",
"field32": "string",
"field33": "string",
"field34": "string",
"field35": "string",
}
}
]
}
@JsonIgnoreProperties(ignoreUnknown = true)
@Data
public class ResponseClass implements Serializable {
private static final long serialVersionUID = -4355652702566088304L;
@JsonProperty("field1")
private String field1;
@JsonProperty("field2")
private String field2;
@JsonProperty("objectList")
private List objectList;
object1、object2和object3不是相同的类型,我只想从响应中获取object2
我尝试过这种方法:
ResponseEntity<ResponseClass> response = restTemplate.exchange( uri, HttpMethod.POST, entity, ResponseClass.class );
我得到了完整的objectList,所以我可以将它提取为键值对,比如objectList.get(0.get(“object2”)或类似的东西。但我不确定是否有更好的解决方案
任何人都可以提供一些关于如何改进此功能或如何获得我想要的对象的指导吗?
objectList[0]。object2
0为您提供列表中的第一项
然后object2访问字典的值。object2 0为您提供列表中的第一项
然后object2访问字典的值。有两种方法查看它 可扩展性和纯面向对象方式: 您需要将整个响应对象正确地映射到您这边,而不是有一个模棱两可的列表。数组应始终具有相同类型的对象。在您的示例中,也基本上有一个包含object1、object2和object3的包装器对象列表 所以,基本上你应该这样做:
@JsonIgnoreProperties(ignoreUnknown = true)
@Data
public class ResponseClass implements Serializable {
private static final long serialVersionUID = -4355652702566088304L;
@JsonProperty("field1")
private String field1;
@JsonProperty("field2")
private String field2;
@JsonProperty("objectList")
private List<IntendedObject> objectList;
}
@JsonIgnoreProperties(ignoreUnknown = true)
@Data
public class IntendedObject {
@JsonProperty("object2")
private Object2 object2;
}
@JsonIgnoreProperties(ignoreUnknown=true)
@资料
公共类ResponseClass实现可序列化{
私有静态最终长serialVersionUID=-4355652702566088304L;
@JsonProperty(“字段1”)
私有字符串字段1;
@JsonProperty(“字段2”)
私有字符串字段2;
@JsonProperty(“对象列表”)
私有列表对象列表;
}
@JsonIgnoreProperties(ignoreUnknown=true)
@资料
公共类意向对象{
@JsonProperty(“object2”)
私人反对2反对2;
}
另一种方法是将响应放在JsonNode中,如果不想将其映射到自定义对象,则对其执行getProperty() 可扩展性和纯面向对象方式: 您需要将整个响应对象正确地映射到您这边,而不是有一个模棱两可的列表。数组应始终具有相同类型的对象。在您的示例中,也基本上有一个包含object1、object2和object3的包装器对象列表 所以,基本上你应该这样做:
@JsonIgnoreProperties(ignoreUnknown = true)
@Data
public class ResponseClass implements Serializable {
private static final long serialVersionUID = -4355652702566088304L;
@JsonProperty("field1")
private String field1;
@JsonProperty("field2")
private String field2;
@JsonProperty("objectList")
private List<IntendedObject> objectList;
}
@JsonIgnoreProperties(ignoreUnknown = true)
@Data
public class IntendedObject {
@JsonProperty("object2")
private Object2 object2;
}
@JsonIgnoreProperties(ignoreUnknown=true)
@资料
公共类ResponseClass实现可序列化{
私有静态最终长serialVersionUID=-4355652702566088304L;
@JsonProperty(“字段1”)
私有字符串字段1;
@JsonProperty(“字段2”)
私有字符串字段2;
@JsonProperty(“对象列表”)
私有列表对象列表;
}
@JsonIgnoreProperties(ignoreUnknown=true)
@资料
公共类意向对象{
@JsonProperty(“object2”)
私人反对2反对2;
}
另一种方法是将响应放在JsonNode中,如果不想将其映射到自定义对象,则对其执行getProperty()?您能根据内部属性将其与其他对象区分开来吗?object2是否具有某种鉴别器?您能否根据内部属性将其与其他对象区分开来?