1

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

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

这就是我要映射的对象,但我想按键映射以自动构建哈希图或字典,而不必迭代列表。

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

class mainMapper {
    List<keyValPairObject> theKeyValPairValues;
}

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

 theKeyValPairValues["values1"].values;
4

2 回答 2

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"]
}

这是你要找的吗?

于 2013-08-25T00:30:20.947 回答
1

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

JsonNode root = mapper.readTree(jsonSource);

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

这样你会喜欢:

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

从您的结构中获取该10.5值。

可以从此条目和数据绑定项目自述文件的“树模型”中找到更多信息。

于 2013-08-21T20:36:51.870 回答