如何将以下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;
答案 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"]
}
这是你在找什么?