如何哈希映射 JSON 的键值对,其中值类型和键值对数量未知
How to hashmap a JSON's key-value pair where Value type and number of key-value pairs not known
我有一个来自数据库的字符串格式的JSON,关于它我只知道它是键值格式。我事先不知道
- JSON 字符串中会有多少对
- 值类型。它可以是字符串或对象。
这是我的一些 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
所以,基本上:键值对的数量和值的类型(字符串,对象)是事先不知道的。
我想将这些数据存储到我的 Hashmap 中。我知道,如果只能是 String: String 格式,我可以按照 Hashmap 中的 put
进行操作。
我的问题是,
- 如何在这种情况下有效地存储 json 而无需遍历 JSON 字符串。
- 我的 Hashmap 类型应该是什么,绝对不是
HashMap <String, String>
?
提前致谢!
您可以使用 com.fasterxml.jackson.databind.ObjectMapper
或 Gson
将字符串转换为 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
的示例。
你可以试试下面的代码。
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());
我有一个来自数据库的字符串格式的JSON,关于它我只知道它是键值格式。我事先不知道
- JSON 字符串中会有多少对
- 值类型。它可以是字符串或对象。
这是我的一些 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
所以,基本上:键值对的数量和值的类型(字符串,对象)是事先不知道的。
我想将这些数据存储到我的 Hashmap 中。我知道,如果只能是 String: String 格式,我可以按照 Hashmap 中的 put
进行操作。
我的问题是,
- 如何在这种情况下有效地存储 json 而无需遍历 JSON 字符串。
- 我的 Hashmap 类型应该是什么,绝对不是
HashMap <String, String>
?
提前致谢!
您可以使用 com.fasterxml.jackson.databind.ObjectMapper
或 Gson
将字符串转换为 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
的示例。
你可以试试下面的代码。
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());