2011-10-27 26 views
1

我目前使用Jackson庫解編json到pojos,使用註釋。json與傑克遜的地圖平坦化

JSON的樹,我想解組如下:

{ 
    "key1":"value1", 
    "key2":"value2", 
    "key3":{ 
     "key31":{ 
      "key311":"value311", 
      "key312":"value312", 
      "key313":"value313" 
     }, 
     "key32":"value32" 
    }, 
    "key4":"value4", 
    "key5":"value5", 
    "key6":{ 
     "key61":"value61" 
    } 
} 

我不知道事先的JSON結構,並想將它完全壓扁到哪些內容是相當於地圖:

Map<String, Object> outputMap = new HashMap<String, Object>(); 
outputMap.put("key1", "value1"); 
outputMap.put("key2", "value2"); 
outputMap.put("key311", "value311"); 
outputMap.put("key312", "value312"); 
outputMap.put("key313", "value313"); 
outputMap.put("key32", "value32"); 
outputMap.put("key4", "value4"); 
outputMap.put("key5", "value5"); 
outputMap.put("key61", "value61"); 

(注意鍵 「KEY3」, 「key31」 和 「鍵6」 應該被忽略)

使用註釋@JsonAnySetter,我可以創造一個functi用所有頂級原子填充地圖,但該方法也會捕獲有孩子的節點(當值爲Map時)。從這一點來說,我當然可以自己寫孩子的簡單遞歸,但是我希望通過使用庫中的一個設施(註釋,配置)來自動處理這個部分(以優雅的方式)等),而不必自己編寫遞歸。

注意:我們假設在不同的關卡中沒有名稱衝突。

回答

1

沒有基於註釋的機制來做到這一點,我知道,因爲@JsonUnwrapped可能適用於只適用於POJO,而不是地圖。 我想你可以提交一個增強請求來要求@JsonUnwrapped擴展到也處理地圖的情況下,雖然它似乎只適合序列化(不知道如何可以反序列化回來)。