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

How to hashmap a JSON's key-value pair where Value type and number of key-value pairs not known

我有一个来自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类型,definetily不是HashMap

提前致谢 !


你可以试试下面的代码。

1
2
3
4
5
6
7
8
9
10
11
12
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());

您可以使用com.fasterxml.jackson.databind.ObjectMapperGson将String转换为Map

以下是使用Gson的示例

1
2
3
4
5
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);
}

您可以在此处获取ObjectMapper的示例。