2017-03-25 63 views
0

例如,如果我反序列化以下JSON成JsonNode:傑克遜反序列化成JsonNode擔保物業訂購嗎?

{ 
    "property1": 1, 
    "property2": 2, 
    "property3": 3 
} 

,然後用JsonNode#fields遍歷元素,是否有任何保證迭代器將返回它們被定義的順序的屬性(即property1 ,property2,property3)?

直覺上我會假設答案是否定的,因爲JSON規範將對象定義爲「一組無名稱/值對」。然而,JSON RFC (RFC 7159)這樣說:

JSON解析庫已經觀察到不同至於他們是否 沒有使對象成員調用 軟件可見的順序。

我還沒有找到任何關於傑克遜如何處理這個問題的信息。

回答

1

source code of Jackson's com.fasterxml.jackson.databind.node.ObjectNode(2.5.0版本,你可以在網站上搜索不同的一個),其中包含對象的子女地圖是LinkedHashMap類型,文件中說

此實現不同的從HashMap中它保持一個 雙向鏈表在其所有條目中運行。此鏈接 列表定義了迭代排序,通常是 中哪些鍵被插入映射(插入順序)中的順序。

+0

這是一個開始,但並沒有真正回答這個問題。有了這些知識,我想我的問題就變成了:「當反序列化時,傑克遜是否保證按順序將屬性插入到LinkedHashMap?」 –

+0

我不明白爲什麼傑克遜開發人員會因爲其他原因選擇這樣的實現 –