我正在对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;
}
}
最佳答案
我想您可以创建一个包含FreebaseResponse
,code
(result
)等字段的ArrayList<Person>
类,并使用Gson进行反序列化。不是有效标识符的names
,例如/common/topic/image
将是一个问题。我自己还没有尝试过,但在我看来SerializedName注释应该可以解决问题。
关于java - 坚持在Android中解析对Java对象的JSON响应,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8884658/