反序列化JSON数组中的不同对象(GSON)

时间:2015-05-27 15:42:10

标签: android json gson json-deserialization

我从服务器获取的getUsers的JSON结果如下所示:

{
  "result": [
    {
      "meta": {
        "rows": "3"
      }
    },
    {
      "items": [
        {
          "id": "1",
          "name": "Steve",
          "age": "30"
        },
        {
          "id": "2",
          "name": "Mary",
          "age": "29"
        },
        {
          "id": "3",
          "name": "Bill",
          "age": "58"
        }
      ]
    }
  ]
}

如何在我的Android应用程序中使用GSON对其进行反序列化(我使用改造)? 由于result中的对象类型不同,我无法想象任何包装类 任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:0)

好的例子 Converting JSON to Java

其他方式,您可以将json转换为java对象

请使用org.json库http://www.json.org/java/index.html

然后,例如

json = new JSONObject(YOUR_JSON).getJSONObject("result");
JSONArray items = data.getJSONArray("items");
String name = items.getJSONObject(0).getString("name");

答案 1 :(得分:0)

您可以为将(de)序列化为(from)数组的类型编写TypeAdapter。您甚至可以将其设为通用,因此它可以使用类似Pair<A, B>的类型。以下是非泛型类型的示例:https://github.com/cakoose/json-tuple-databinding-examples/blob/master/java/src/GsonEntryCustomizer.java - 它(de)将Entry序列化为(来自数组)。
免责声明 - 我没有编写或测试过该代码,但似乎是合法的。

如果你只遇到过一次这样的问题(就像在你的例子中一样),你可能不会把它变成通用的,只需为你特定的2对不同的类写一下TypeAdapter。阅读代码非常简单:

in.beginArray();
SomeClass1 info1 = gson.getAdapter(SomeClass1.class).read(in);
SomeClass2 info2 = gson.getAdapter(SomeClass2.class).read(in);
in.endArray();
return new SomeContainerClass(info1, info2);

(见https://github.com/cakoose/json-tuple-databinding-examples/blob/master/java/src/GsonEntryCustomizer.java#L52