我有這樣一個模式(簡體):爪哇 - 傑克遜的Json封裝遍歷樹
{
"range": {
"offset": 0,
"limit": 1,
"total": 2
},
"items": [
{
"id": 11,
"name": "foo",
"children": [
{
"id": 112,
"name": "bar",
"children": [
{
"id": 113,
"name": "foobar",
"type": "file"
}
],
"type": "folder"
},
{
"id": 212,
"name": "foofoo",
"type": "file"
}
],
"type": "room"
},
{
"id": 21,
"name": "barbar",
"type": "room"
}
]
}
我僅需要讀取特定值就像從第一室(項目)「ID」。爲此,我需要遍歷每個級別上的所有項目(n個項目爲root,n個項目爲n個子項)與類型文件夾或文件。
現在我有這樣的代碼:
POJO
public static class Item {
public int id;
}
傑克遜樹迭代
ObjectMapper mapper = new ObjectMapper();
com.fasterxml.jackson.databind.JsonNode root = mapper.readTree(JSON);
root = root.get("items").get(0);
TypeReference<List<Item>> typeRef = new TypeReference<List<Item>>(){};
List<Item> list = mapper.readValue(root.traverse(), typeRef);
for (Item f : list) {
System.out.println(f.id);
}
我怎樣才能讓所有的孩子都的ID與特定類型的所有項目? 如何在不定義整個模式的情況下避免「無法識別的字段」異常?
非常感謝您的幫助!
謝謝您的回答。我已經使用readTree(更新的問題),但我需要更多的處理邏輯爲找到的項目。因此,我需要列出所有「文件」和「文件夾」項目。 – metamagicson
根JsonNode上的findValues(「file」)和findValues(「folder」)會給你。因爲這個原因,它返回一個JsonNodes列表。 – Gandalf