Skip to content Skip to sidebar Skip to footer

How To Create A Complex Json Using Hashmap In Android?

I am facing a problem creating a Json which is actually a complex one and i need to create it through HashMap only..I was actually looking for some recursive function that could be

Solution 1:

You'd do something like this:

public void toJSON(Map<?, ?> map, JSONStringer stringer) throws JSONException {
    stringer.object();
    for (Map.Entry<?, ?> entry : map.entrySet()) {
        stringer.key(String.valueOf(entry.getKey()));
        toJSONValue(entry.getValue(), stringer);
     }
    stringer.endObject();
}

public void toJSONValue(Object value, JSONStringer stringer) throws JSONException {
    if (value == null) {
        stringer.value(null);
    } else if (value instanceof Collection) {
        toJSON((Collection<?>) value, stringer);
    } else if (value instanceof Map) {
        toJSON((Map<?, ?>) value, stringer);
    } else if (value.getClass().isArray()) {
        if (value.getClass().getComponentType().isPrimitive()) {
            stringer.array();
            if (value instanceof byte[]) {
                for (byte b : (byte[]) value) {
                    stringer.value(b);
                }
            } else if (value instanceof short[]) {
                for (short s : (short[]) value) {
                    stringer.value(s);
                }
            } else if (value instanceof int[]) {
                for (int i : (int[]) value) {
                    stringer.value(i);
                }
            } else if (value instanceof float[]) {
                for (float f : (float[]) value) {
                    stringer.value(f);
                }
            } else if (value instanceof double[]) {
                for (double d : (double[]) value) {
                    stringer.value(d);
                }
            } else if (value instanceof char[]) {
                for (char c : (char[]) value) {
                    stringer.value(c);
                }
            } else if (value instanceof boolean[]) {
                for (boolean b : (boolean[]) value) {
                    stringer.value(b);
                }
            }
            stringer.endArray();
        } else {
            toJSON((Object[]) value, stringer);
        }
    } else {
        stringer.value(value);
    }
}

public void toJSON(Object[] array, JSONStringer stringer) throws JSONException {
    stringer.array();
    for (Object value : array) {
        toJSONValue(value, stringer);
    }
    stringer.endArray();
}

public void toJSON(Collection<?> collection, JSONStringer stringer) throws JSONException {
    stringer.array();
    for (Object value : collection) {
        toJSONValue(value, stringer);
    }
    stringer.endArray();
}

To construct the example you gave:

// Using a variety of maps since all should work..HashMap<String, Object> pkt = newHashMap<String, Object>();

    LinkedHashMap<String, String> data1 = newLinkedHashMap<String, String>();
    data1.put("b", "2");
    data1.put("c", "3");
    data1.put("a", "1");

    LinkedHashMap<String, String> data2 = newLinkedHashMap<String, String>();
    data2.put("z", "3");
    data2.put("y", "2");
    data2.put("x", "1");

    TreeMap<String, Object> data3 = newTreeMap<String, Object>();
    data3.put("z", "3");
    data3.put("y", "2");
    data3.put("x", "1");

    pkt.put("data2", data2);
    pkt.put("data3", data3);
    pkt.put("mid", "1328779096525");
    pkt.put("data1", data1);
    pkt.put("msg", "10012");
    try {
        JSONStringer stringer = newJSONStringer();
        stringer.object();
        stringer.key("pkt");
        toJSON(pkt, stringer);
        stringer.endObject();
        System.out.println(stringer.toString());
    } catch (JSONException e) {
        // Time for some error-handling
    }

Which would result in (formatted for viewing):

{
   "pkt":{
      "data2":{
         "z":"3",
         "y":"2",
         "x":"1"
      },
      "mid":"1328779096525",
      "data3":{
         "x":"1",
         "y":"2",
         "z":"3"
      },
      "msg":"10012",
      "data1":{
         "b":"2",
         "c":"3",
         "a":"1"
      }
   }
}

Solution 2:

We're using GSON for our object/JSON conversions. Here's a link for more info: GSON

Post a Comment for "How To Create A Complex Json Using Hashmap In Android?"