我有一個可以有多種類型的JSON文件。使用流/對象方法將JSON解析爲Jackson
例如:
{
"dog": {
"owner" : "John Smith",
"name" : "Rex",
"toys" : {
"chewtoy" : "5",
"bone" : "1"
}
},
"person": {
"name" : "John Doe",
"address" : "23 Somewhere Lane"
}
// Further examples of dogs and people, and a few other types.
}
我想這些解析爲對象。即。我想創建一個擁有所有者/名稱/玩具屬性的Dog對象,以及具有名稱/地址屬性的人員,並使用Jackson來讀取並創建對象。
排序很重要 - 例如,我需要知道Rex出現在John Doe之前。我更喜歡使用類似流的方法(即將雷克斯閱讀並解析爲Dog對象,對其進行處理,然後丟棄它,然後轉到John Doe)。所以我需要一個基於流的方法。
我不知道如何使用流讀取API(按順序通過)和ObjectMapper接口(爲了創建JSON的Java對象)來完成此操作。
(1)您對流或類SAX解析的問題完全有效。 +1。但是(2)如果您在字典中訂購事宜,您的數據設計得不好。 JSON字典本質上是無序的。如果您需要訂單,請使用數組並將類型(狗/人)信息作爲屬性進行編碼。 –
嗯。數據源可能不可更改(不受我控制)。當你說使用數組並對信息進行編碼時,你的意思是手動執行此操作嗎? (通讀所有令牌並創建適當的對象來調用適當的setter)或者有沒有辦法使用Jackson做到這一點? –
我的意思是說,如果訂單很重要,那麼JSON數據應該以數組的形式出現,而每種對象都使用不同的編碼類型。但是,如果您不控制JSON數據,那麼就不會想到 - 您必須按照您的建議處理流解析。 :)我沒有你的實際問題的答案,雖然其他人肯定會這樣做。但要知道,想出這種JSON格式的人正在玩火。依靠字典中的鍵的順序是非常脆弱的,不要說它爲正在嘗試處理它的人(你)創造的屁股疼痛 - 它違背了大多數工具的五穀。 –