2013-08-21 200 views
1

如何將以下json有效載荷映射到更友好的字典中,如查找?我得到的數據將作爲列表中的通用鍵值返回。但我希望能夠通過密鑰訪問所有內容,而不是將所有內容存儲爲列表。Json傑克遜映射問

[ 
    { 
     "key":"value1", 
     "values":[ 
     10.5 
     ] 
    }, 
    { 
     "key":"value2", 
     "values":[ 
     20.5 
     ] 
    } 
    o o o more values here... o o o 
] 

這是我有對象映射,但我想通過鍵自動建立一個HashMap或字典withough不必重複繪製以爲列表。

class keyValPairObject { 
    private String key; 
    private List<?> values; 
} 

class mainMapper { 
    List<keyValPairObject> theKeyValPairValues; 
} 

我想將其存儲在一個對象,我可以訪問它想:

theKeyValPairValues["values1"].values; 
+0

那麼你爲什麼不直接使用HashMap對象呢?然後您可以將每個鍵設置爲一個字符串,並將每個值設置爲一個列表。語法與你所說的有些不同:map.get(「values1」);這將返回關鍵字「values1」的值列表。 – UpAllNight

+0

我怎樣才能將它映射到哈希映射對象爲每個傑克遜或將它是一個手動過程迭代每個JSON列表,然後構建一個哈希映射? – JaJ

+0

@UpAllNight:Thx的答覆,所以我必須手動創建哈希映射或將傑克遜映射它自動爲我?不知道我該如何設置。 – JaJ

回答

1

也許你應該使用 「樹模型」,使:

JsonNode root = mapper.readTree(jsonSource); 

然後可以使用「get()」和「path()」方法遍歷值。 path()是很好的,因爲你可以跳過任何空的檢查(如果一個節點不存在,虛擬的「缺失」節點被包括在內,所以你可以自由連鎖調用)。

這樣,你會做這樣的:

int value = rootNode.path(0).path("value").path(0).asIntValue(); 

充分利用您的結構10.5值。

位詳細信息可以從this entry和數據綁定項目的自述文件的「Tree Model」中找到。

+0

這很酷!我會給這一槍! – JaJ

1

好的,我希望這可以幫助你。下面是一些代碼:

import java.io.IOException; 
import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.List; 
import org.codehaus.jackson.map.ObjectMapper; 

public String hashmapToJson() { 

    ObjectMapper mapper = new ObjectMapper(); 
    String result = ""; 

    HashMap<String, List<String>> map = new HashMap<String, List<String>>(); 

    String key1 = "values1"; 
    String key2 = "values2"; 
    String key3 = "values3"; 

    List<String> list1 = new ArrayList<String>(); 
    List<String> list2 = new ArrayList<String>(); 
    List<String> list3 = new ArrayList<String>(); 

    for(int i = 0; i < 3; i++){ 
     list1.add("Element" + i); 
     list2.add("Element" + i); 
     list3.add("Element" + i); 
    } 

    map.put(key1, list1); 
    map.put(key2, list2); 
    map.put(key3, list3); 

    try { 
     result = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(map); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

    return result; 

} 

這將返回:

{ 
"values1":["Element0","Element1","Element2"], 
"values2":["Element0","Element1","Element2"], 
"values3":["Element0","Element1","Element2"] 
} 

難道這就是你要找的人?

+0

太棒了!謝謝! – JaJ