我有这个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(但另一个简单的解决方案也可以)。我认为豆子的结构应该是这样的:
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])
没有例外,但我得到了豆子的错误内容:
ResponseBean(0,false,null)
它应该是2,true,“list with records”。有人能告诉我解析JSON字符串的bean的正确结构吗?
提前谢谢你......
祝你好运, 启
答案 0 :(得分:3)
我不太明白你使用的符号。但是我在那里看到了几个错误:
AttributeBean
的字段应为type
,而不是typ
Name
属性应该在类定义中封顶(如果我看一下json)否则你对GSON的期望似乎很好,代码也是如此。 GSON易于使用,我认真推荐它。您的代码中可能出现的唯一其他问题是scala-ralated,因为我不懂语言。
编辑添加如何让类字段与json字段不匹配的Java示例:
{
"type" : "Article__c",
"url" : "/services/data/v20.0/sobjects/Article__c/a01d00000030gSxAAI"
}
和java代码:
public class AttributeBean {
public String url;
@SerializedName("type")
public String typ;
}
由于这个注释,解析将会正常。
答案 1 :(得分:3)
Gson本身并不使用Scala“案例类”。将Json与“案例类”一起使用的两个最佳选择是Jerkson和lift-json。在使用两者之后,我建议Jerkson的速度和流读取和写入的支持,但这两个库应该满足您的用例。
答案 2 :(得分:0)
您可以为字段`type`
命名(在反引号中),这可能有助于解决关键字已经占用的字段名称问题。