Search code examples
javajsonhashmapkeyvaluepair

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


I have a JSON in string format coming from DB, about which I only know that it's in key-value format. I don't know beforehand

  • How many pairs will be there in JSON string
  • type-of Value. It can be String or Object.

Here are some of my JSON String:

  • {"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

So, basically: Number of key-value pair and type of value(String, Object) is not known beforehand.

I want to store this data into my Hashmap. I know that if could be only String: String format, I could do as following put in the Hashmap.

My question is,

  • How I can store json in this case efficiently without iterating over JSON String.
  • What should be my Hashmap type, definetily not HashMap <String, String> ?

Thanks in Advance !


Solution

  • You can use the com.fasterxml.jackson.databind.ObjectMapper or Gson to convert the String into a Map<String, Object>.

    Here is an example using 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);
    }
    

    You can get an example of the ObjectMapper in action over here.