2013-08-21 166 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