我有这个 JSON 字符串:
{
"totalSize" : 2,
"done" : true,
"records" : [ {
"attributes" : {
"type" : "Article__c",
"url" : "/services/data/v20.0/sobjects/Article__c/a01d00000030gSxAAI"
},
"Name" : "ABC - Fri Mar 30 01:54:57 CEST 2012"
}, {
"attributes" : {
"type" : "Article__c",
"url" : "/services/data/v20.0/sobjects/Article__c/a01d00000030gSaAAI"
},
"Name" : "XYZ - Fri Mar 30 01:52:25 CEST 2012"
} ]
}
我需要一个 Java 对象来获取键的值。我尝试使用 Gson(但另一个简单的解决方案也可以)。我认为 bean 的结构应该是这样的:
case class AttributeBean(typ: String, url: String)
case class RecordBean(attributes: List[AttributeBean], name: String)
case class ResponseBean(totalSize: Int, done: Boolean, records: List[RecordBean])
不幸的是,这不起作用。我执行以下 Gson 调用:
val response : ResponseBean = gson.fromJson(responseAsString, classOf[ResponseBean])
没有异常(exception),但我得到了这个错误的 bean 内容:
ResponseBean(0,false,null)
应该是2,true,“有记录的列表”。有人能告诉我解析 JSON 字符串的 bean 的正确结构吗?
提前致谢...
最好的问候, 凯
最佳答案
我不太明白你使用的符号。但是我在那里看到了几个错误:
- Attributes 不是一个列表,只是一个对象,或者至少你的 json 是这么写的
AttributeBean
的字段应该是type
,而不是typ
Name
属性应该在类定义中大写(如果我查看 json)
否则您对 GSON 的期望似乎很好,代码也是如此。 GSON 易于使用,我强烈推荐它。您的代码中可能出现的唯一其他问题是标定问题,因为我不懂该语言。
编辑 添加一个 Java 示例,说明如何使类字段与 json 字段不匹配:
{
"type" : "Article__c",
"url" : "/services/data/v20.0/sobjects/Article__c/a01d00000030gSxAAI"
}
Java 代码:
public class AttributeBean {
public String url;
@SerializedName("type")
public String typ;
}
由于这个注解,解析会正常进行。
关于java - 使用 GSON(或任何其他库)将 JSON 转换为 Java/Scala -> Bean 结构不清楚,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9939357/