我正在对freebase进行查询,并且收到JSON响应。响应具有以下结构:

{
  "code":          "/api/status/ok",
  "result": [
    {
      "/common/topic/image": [{
        "guid": "#9202a8c04000641f8000000004b67f6d"
      }],
      "/people/person/profession": [{
        "name": "Critic"
      }],
      "id":   "/en/michael_jackson_1942",
      "name": "Michael Jackson",
      "type": "/people/person"
    },
    {
      "/common/topic/image": [{
        "guid": "#9202a8c04000641f800000001b90fdea"
      }],
      "/people/person/profession": [{
        "name": "Actor"
      }],
      "id":   "/en/michael_jackson_1970",
      "name": "Michael Jackson",
      "type": "/people/person"
    }
  ],
  "status":        "200 OK",
  "transaction_id": "cache;cache03.p01.sjc1:8101;2012-01-16T18:28:36Z;0055"
}


我需要使用GSON在Java对象的ArrayList中解析此响应。为此,我需要使用get / set创建对象的类并使其可解析。还是有另一种更简单的做事方式?到目前为止,我已经使用了简单的JSON字符串,但是在这种情况下,我无法重新构建所需的类的结构。基本上,最后我需要类似ArrayList<Person>的东西,其中Person具有json字符串中的所有属性。

任何帮助表示赞赏。谢谢。

最终的解决方案,根据以下答案

public class FreebaseResponse {
    @SerializedName("code")
    public String code;

    @SerializedName("result")
    public ArrayList<Person> result;

    @SerializedName("status")
    public String status;

    @SerializedName("transaction_id")
    public String transaction_id;
}

public class Person {
    @SerializedName("/common/topic/image")
    public ArrayList<Person.Guid> imageGuid;

    @SerializedName("/people/person/profession")
    public  ArrayList<Person.Profession> profession;

    @SerializedName("id")
    public String id;

    @SerializedName("name")
    public String name;

    @SerializedName("type")
    public String type;

    private class Guid
    {
        @SerializedName("guid")
        public String guid;
    }

    private class Profession
    {
        @SerializedName("name")
        public String name;
    }
}

最佳答案

我想您可以创建一个包含FreebaseResponsecoderesult)等字段的ArrayList<Person>类,并使用Gson进行反序列化。不是有效标识符的names,例如/common/topic/image将是一个问题。我自己还没有尝试过,但在我看来SerializedName注释应该可以解决问题。

关于java - 坚持在Android中解析对Java对象的JSON响应,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8884658/

10-12 00:15
查看更多