Java 使用任何jackson库解析json的最佳方法
对于一个正在进行的开发,外部rest服务返回如下响应:Java 使用任何jackson库解析json的最佳方法,java,jackson,Java,Jackson,对于一个正在进行的开发,外部rest服务返回如下响应: { "type": "State", "id": "12344", "prodId": "wert", "players": 14, "feeds": { "abc123": { ----- }, "def1234": { ----- }, --- ---
{
"type": "State",
"id": "12344",
"prodId": "wert",
"players": 14,
"feeds": {
"abc123": {
-----
},
"def1234": {
-----
},
---
---
"someRandomAlphanumericValue": {
}
}
}
这里的要求是,我想解析这个JSON,并以java对象的格式输出,以便于访问。具有随机字母数字属性,如
Map
Jackson将通过构建HashMap来绑定它们,并将这些属性添加到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 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());
});
}
}
}
这表明我们可以访问所有属性您将需要创建类似于响应的模型类,并且您可以使用更快的jackson api将其解析为java模型created@Ishant,感谢您的评论,因为您可以看到该键始终是随机值;这就是问题所在;因此,将该随机值映射到json元素并不需要您的帮助;你能帮我查一下示例代码吗snippet@Creator我很感激你的尝试,但我编辑了我的答案,给出了一个完整的例子。谢谢你的努力。
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());
});
}
}
}