如何散列映射JSON的键值对,其中值类型和键值对的数量未知

时间:2017-09-20 03:24:10

标签: java json hashmap keyvaluepair

我有来自DB的字符串格式的JSON,我只知道它是键值格式的。我事先不知道

  • JSON字符串中有多少对
  • 类型的价值。它可以是String或Object。

以下是我的一些JSON字符串:

  • {"windowHandle":"current"} \\ in one String: String format
  • {"type":"implicit","ms":100000} \\ in two String: String format
  • {"id":"{a67fc38c-10e6-4c5e-87dc-dd45134db570}"} \\ in one String: String format
  • {"key1": {"sub-key1": "sub-value1", "sub-key2": "sub-value2"}, "key2": {"sub-key2": "sub-value2"}} \\ in two String: Object format

所以,基本上:键值对的数量和值的类型(String,Object)事先是未知的。

我想将这些数据存储到我的Hashmap中。我知道如果只能使用String:String格式,我可以在Hashmap中执行以下put

我的问题是

  • 如何在不迭代JSON字符串的情况下有效地存储json。
  • 我的Hashmap类型应该是什么,而不是HashMap <String, String>

提前致谢!

2 个答案:

答案 0 :(得分:4)

您可以尝试使用以下代码。

List<Map<String, Object>> mapdataList = new ArrayList<Map<String, Object>>();

    Map<String, Object> MapObj = new HashMap<String, Object>();
    MapObj.put("windowHandle", "current");
    MapObj.put("id", "{a67fc38c-10e6-4c5e-87dc-dd45134db570}");
    mapdataList.add(MapObj);

    Gson gson = new Gson();
    JsonObject jObject = new JsonObject();
    JsonParser jP = new JsonParser();
    jObject.add("data", jP.parse(gson.toJson(mapdataList)));
    System.out.println(jObject.toString());

答案 1 :(得分:0)

您可以使用com.fasterxml.jackson.databind.ObjectMapperGson将字符串转换为Map<String, Object>

以下是使用Gson

的示例
public static void main(String[] args) {
    Gson gson = new GsonBuilder().setPrettyPrinting().create();
    Map map = gson.fromJson("{\"var\":\"value\"}", Map.class);
    System.out.println("map = " + map);
}

您可以通过here获取ObjectMapper的示例。