Gson将JSON转换为包含对象HastMap的Object?

时间:2012-08-24 09:53:59

标签: android json gson

我有一个问题,我对此一无所知,任何人都可以帮助我: 我们有一个json:

    {
      "status":"0",
      "result": {
        "object1": {
          "name":"name1",
          "age":"21"
        },
        "object2": {
          "event":"new year",
          "date":"date"
        },
        "object1_1": {
          "name":"name2",
          "age":"22"
        },
        "object2_1": {
          "event":"birthday",
          "date":"date"
        }
      }
    }

2 个答案:

答案 0 :(得分:1)

您可以尝试使用jackson json转换为对象。 http://jackson.codehaus.org/

答案 1 :(得分:0)

如果要将此json反序列化为包含Map的对象(并且该地图包含litteral值和其他地图)。假设你有一个类似于:

的bean
class MyBean {
    int status;
    Map<String, Object> result;
}

MyBean myBean = new Gson().fromJson(jsonString, MyBean.class);

它应该无需修改即可使用。请注意,如果状态类型不是数字,我不确定Gson是否在json字符串中进行了转换,引用了值,同样适用于您的“age”属性。

您还可以查看Genson库http://code.google.com/p/genson/它具有大多数Gson功能,其他没有其他库提供并具有更好的性能。看一下wiki http://code.google.com/p/genson/wiki/GettingStarted

修改

名称是否真的像object1_1,object2_1等?在查看结构时,我想象object1与object2一起使用了很长时间。如果您使用gson,您可以编写自定义TypeAdapter http://google-gson.googlecode.com/svn/trunk/gson/docs/javadocs/com/google/gson/TypeAdapter.html

因此,您可以创建类似于

的根对象
 class Response {
     int status;
     List<MyObject> result;
 }

 class MyObject {
     String name;
     int age;
     String event;
     String date;
 }

在TypeAdapter的read方法中,您应该根据键(object1 with object2,object1_1 with object2_1 ...)组合MyObject的实例,或采用类似的方法。 如果您想了解更多有关如何操作的详细信息,您也可以向Gson google小组询问。