如何在android中使用HashMap创建复杂的JSON?

如何在android中使用HashMap创建复杂的JSON?,android,json,hashmap,Android,Json,Hashmap,我在创建一个Json时遇到了一个问题,这实际上是一个复杂的问题,我只需要通过HashMap创建它。我实际上在寻找一些递归函数,这可能是解决我问题的最佳方法 我需要创建的JSON看起来像 {"pkt":{ "data2":{"z":"3", "y":"2", "x":"1"}, "data3":{"n":"3", "l":"1", "m":"2"}, "mid":"1328779096525", "data1":{"b":"2", "c":"3", "a":"1"}

我在创建一个Json时遇到了一个问题,这实际上是一个复杂的问题,我只需要通过HashMap创建它。我实际上在寻找一些递归函数,这可能是解决我问题的最佳方法

我需要创建的JSON看起来像

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

有什么想法吗???

我们正在使用GSON进行对象/JSON转换。这里有一个链接提供更多信息:

我们使用GSON进行对象/JSON转换。以下是有关更多信息的链接:

您可以这样做:

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

你可以这样做:

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

谢谢Jens…我也在做同样的事情,但在这方面遇到了一些问题。Nyways..我从你发布的代码中得到了我的错误。谢谢Jens..我也在做同样的事情,但在这方面遇到了一些问题。Nyways..我从你发布的代码中得到了我的错误。斯科特..使用GSN是一个很好的选择,实际上我blv是最好的,因为它是最快的…但是wat Jens回答的是我一直在寻找的东西..斯科特..使用GSN是一个很好的选择,实际上我blv是最好的,因为它是最快的…但是wat Jens回答的是我一直在寻找的东西。。
{
   "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"
      }
   }
}