将随机字母数字属性设为Map<String, WhateverIsTheTypeTheyContain>
Jackson 会通过构建一个 HashMap 来绑定它们,并将这些属性添加到其中,属性名作为键,属性值作为值。
这是一个完整的例子:
鉴于当前包中保存为“feeds.json”的有效 JSON 文件:
{
"id": "12344",
"players": 14,
"feeds": {
"abc123": {
"id": "1",
"number": 1
},
"def1234": {
"id": "2",
"number": 2
},
"someRandomAlphanumericValue": {
"id": "3",
"number": 3
}
}
}
我们定义这些类以将其绑定到:
public class FeedContainer {
private String id;
private int players;
private Map<String, Feed> feeds;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public int getPlayers() {
return players;
}
public void setPlayers(int players) {
this.players = players;
}
public Map<String, Feed> getFeeds() {
return feeds;
}
public void setFeeds(Map<String, Feed> feeds) {
this.feeds = feeds;
}
}
和
public class Feed {
private String id;
private int number;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public int getNumber() {
return number;
}
public void setNumber(int number) {
this.number = number;
}
}
现在我们可以用这个类来测试这些:
public class FeedContainerTry {
public static void main(String[]args) throws IOException {
ObjectMapper mapper = new ObjectMapper();
try(InputStream is = FeedContainerTry.class.getResourceAsStream("feeds.json")) {
FeedContainer container = mapper.readValue(is, FeedContainer.class);
container.getFeeds().forEach((key, feed) -> {
System.out.println(key + ": " + feed.getId() + ", " + feed.getNumber());
});
}
}
}
这表明我们可以访问所有属性