Java 在Android上使用Gson实现JSON中的“点播”
我试图在Android中使用Gson解析JSON提要。我知道JSON是有效的。我怀疑是因为格式如下:Java 在Android上使用Gson实现JSON中的“点播”,java,android,json,gson,Java,Android,Json,Gson,我试图在Android中使用Gson解析JSON提要。我知道JSON是有效的。我怀疑是因为格式如下: "Info":[ { "Id":"", "Name":"", "Description":"", "Date":"" } 为了分析这个,我需要点进去。例:信息。姓名 如何在序列化DTO中执行此操作 @SerializedName("Name") public String name; @SerializedName("Description") public String desc;
"Info":[
{
"Id":"",
"Name":"",
"Description":"",
"Date":""
}
为了分析这个,我需要点进去。例:信息。姓名
如何在序列化DTO中执行此操作
@SerializedName("Name")
public String name;
@SerializedName("Description")
public String desc;
@SerializedName("Date")
public String date;
我试着输入信息。在每个序列化名称前面,但这也不起作用。我还知道我的JSON解析方法工作正常,因为它在其他地方使用不同的DTO。但在解析过程中,我不必考虑点滴问题
有人能帮忙吗
编辑:我已经尝试了你们发布的所有东西,但没有任何效果。错误显示:
The JsonDeserializer failed to deserialize json object {"Info":[{".......
第二次编辑:
我能够消除错误,但现在它返回null。哈哈,现在真他妈的很沮丧 由于[],Info对象是一个列表。必须使用以下代码对其进行反序列化: 编辑:
然后使用数据类来反序列化json。我假设您输入的实际json有效,因为您提供的示例无效。在JSON示例中,您有Info:[但是没有包含Info属性的外部对象,这是必须的。有效的JSON应该是:
{
"Info": [
{
"Id":"",
"Name":"",
"Description":"",
"Date":"",
}
]
}
这是一个JSON对象,其属性信息的值为对象列表。此对象列表包含一个具有属性Id、名称、描述和日期的对象,所有这些属性都具有空字符串值
下面是一个关于如何使用GSON解析JSON提要(如上面的JSON)的快速教程:
您将需要一个类来表示列表中的项目:
public class InfoItem {
public String Id;
public String Name;
public String Description;
public String Date;
public InfoItem() {}
}
一个代表项目列表:
public class InfoItemList extends LinkedList<InfoItem> {
public InfoItemList() { super() };
}
然后就是:
gson.fromJson(jsonString, InfoMessage.getClass());
如果只是反序列化集合:
Type listType = new TypeToken<List<InfoItem>>() {}.getType();
gson.fromJson(jsonString2, listType);
你想把你的json代码放到java对象中并访问成员吗?我被你的问题弄糊涂了。是的,这是正确的。它可以与我在我的应用程序中的其他json解析一起工作,但不是当我必须点进去从json feedok获取值时。考虑到这一点,我说的可能是错误的,我必须验证它。是的,json是有效的,只是不想粘贴整个内容。我将尝试此操作并返回报告。@Raijv M.InfoItemList类是否应该扩展集合?它要求我更改为集合或创建类集合?@Magnus抱歉,不应该是集合,因为这是抽象的。我将其更改为扩展LinkedList,因为这是具体的.让我知道这对你是否有效。@Magnus这个解决方案有什么好处吗?
gson.fromJson(jsonString, InfoMessage.getClass());
Type listType = new TypeToken<List<InfoItem>>() {}.getType();
gson.fromJson(jsonString2, listType);