2017-09-20 38 views
0

我有一个来自DB的字符串格式的JSON,关于它我只知道它是键值格式。我不知道事先如何哈希映射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>

在此先感谢!

+1

*如何在这种情况下有效存储json而无需迭代JSON字符串。*如果不解析JSON,则无法解析它。 – shmosel

+0

*什么应该是我的HashMap类型,definetily不是HashMap ?*如何'Map '? – shmosel

+0

HashMap '有什么问题? – Henry

回答

1

您可以使用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的示例的例子。

3

你可以尝试下面的代码。

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());