杰森杰克逊映射问

时间:2013-08-21 16:35:24

标签: json spring-mvc jackson

如何将以下json有效负载映射到更友好的字典,如查找?我得到的数据将作为列表中的通用键值返回。但我希望能够通过密钥访问所有内容作为字典查找,而不是将所有内容存储为列表。

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

这就是我对象的映射,但是我希望按键映射以自动构建一个hashmap或字典,而不必迭代思考列表。

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

class mainMapper {
    List<keyValPairObject> theKeyValPairValues;
}

我想将它存储在一个可以访问它的对象中:

 theKeyValPairValues["values1"].values;

2 个答案:

答案 0 :(得分:1)

也许您应该使用“树模型”,以便:

JsonNode root = mapper.readTree(jsonSource);

然后您可以使用“get()”和“path()”方法遍历值。 path()很好,因为你可以跳过任何空检查(如果一个节点不存在,则包含一个虚拟的“缺失”节点,这样你就可以自由地链接调用了。)

你会这样做:

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

从您的结构中获取10.5值。

可以从this entry和databind项目自述文件的“Tree Model”找到更多信息。

答案 1 :(得分: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"]
}

这是你在找什么?