java - 形成pojo来解析JSON

标签 java spring-boot jackson

我的 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,我会得到 null 值。如何保留变量 item1 和 item2 的通用名称,并且仍然能够正确读取通用变量中的值?有什么注释可以帮助这里吗?

最佳答案

我相信这就是您正在寻找的 Baeldung tutorial :

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"));
}

在您的情况下,您只需在 map 中查询您希望进行的任何查询的字符串值即可。

关于java - 形成pojo来解析JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42430085/

相关文章:

java - Spring JPA 有时会跳过插入实体

java - 为 JSON 响应中的字段选择数据类型

Java - jackson 数组映射

java - 正则表达式排除字符不起作用

java - 如何在Java中调用dll?

java - 我不明白这个错误。 (android构建错误cordova)

spring-boot - JwtAccessTokenConverter : Unable to create an RSA verifier from verifierKey

Java向文本文件的特定部分添加行

java - 无法使用 thymeleaf 和 Spring Boot 保存实体

json - RESTEasy 和 Jackson 提供程序无法将带有 @XmlIDREF 和 @XmlID 的实体序列化为 JSON