java—如何从json响应中获取特定对象

5uzkadbs  于 2021-07-06  发布在  Java
关注(0)|答案(2)|浏览(388)

我收到一个来自第三方服务的回复,如下所示:

{
    "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",
            }
        }
    ]
}

object1、object2和object3不是同一类型,我只想从响应中获取object2。
我尝试过这种方法:

ResponseEntity<ResponseClass> response = restTemplate.exchange( uri, HttpMethod.POST, entity, ResponseClass.class );

其中responseclass如下所示:

@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;

我得到了完整的objectlist,所以我可以将它提取为键值对,比如objectlist.get(0.get(“object2”)或类似的东西。但我不确定是否有更好的解决办法。
有谁能提供一些关于如何改进这一点或如何得到我想要的东西的指导吗?

hm2xizp9

hm2xizp91#

有两种方式来看待它。
可扩展性和纯面向对象方式:
您需要在自己的位置正确地Map整个响应对象,而不是有一个模棱两可的列表。数组应始终具有相同类型的对象。在您的示例中,也基本上有一个包含object1、object2和object3的 Package 器对象列表。
所以,基本上你应该这样做:

@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;
 }

另一种方法是将响应放在jsonnode中,如果不想将其Map到自定义对象,则对其执行getproperty()。

frebpwbc

frebpwbc2#

objectList[0].object2 0提供列表中的第一项,然后object2访问字典的值

相关问题