我的 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/