繁体   English   中英

形成pojo来解析JSON

[英]Form pojo to parse JSON

我的json看起来像这样:

{
   "bid": "181.57",
   "ask": "181.58",
   "volume": {
       "item1": "543.21",
       "item2": "123.45",
       "timestamp": 1487903100000
   },
   "last": "181.58"
}

我正在尝试使用spring restTemplate将其读入pojo。 我当前的pojo是这样的:

import com.fasterxml.jackson.annotation.JsonProperty;

public class DataModel {
  private String last;

  private Volume volume;

  private String ask;

  private String bid;

  // Getter and setters
}

class Volume
{
    private String timestamp;

    @JsonProperty
    private String item1;

    @JsonProperty
    private String item2;

    // Gettersand setters
}

问题是,根据我要查询的实体,json的“ item1”和“ item2”可以更改为“ item5”和“ item6”。 如果我的变量分别命名为item1和item2,则会得到空值。 如何保留变量item1和item2的通用名称,并且仍然能够正确读取通用变量中的值? 有没有任何注释可以帮助您?

我相信这就是您从Baeldung教程中寻找的内容

3.3。 @JsonAnySetter

@JsonAnySetter使您可以灵活地将Map用作标准属性。 反序列化时,JSON的属性将仅添加到地图中。

让我们看看它是如何工作的–我们将使用@JsonAnySetter反序列化实体ExtendableBean:

public class ExtendableBean {
    public String name;
    private Map<String, String> properties;

    @JsonAnySetter
    public void add(String key, String value) {
        properties.put(key, value);
    }
}

这是我们需要反序列化的JSON:

{
    "name":"My bean",
    "attr2":"val2",
    "attr1":"val1"
}

这是所有这些如何结合在一起的方式:

@Test
public void whenDeserializingUsingJsonAnySetter_thenCorrect()
  throws IOException {
    String json
      = "{\"name\":\"My bean\",\"attr2\":\"val2\",\"attr1\":\"val1\"}";

    ExtendableBean bean = new ObjectMapper()
      .readerFor(ExtendableBean.class)
      .readValue(json);

    assertEquals("My bean", bean.name);
    assertEquals("val2", bean.getProperties().get("attr2"));
}

在您的情况下,您只需在映射中查询对您进行的任何查询所期望的String值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM