使用GSON(或任何其他库)将JSON转换为Java / Scala - >豆结构不清楚

时间:2012-03-30 08:22:53

标签: java json scala gson

我有这个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的正确结构吗?

提前谢谢你......

祝你好运, 启

3 个答案:

答案 0 :(得分:3)

我不太明白你使用的符号。但是我在那里看到了几个错误:

  • 属性不是列表,只是一个对象,或者至少是你的json所说的
  • 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与“案例类”一起使用的两个最佳选择是Jerksonlift-json。在使用两者之后,我建议Jerkson的速度和流读取和写入的支持,但这两个库应该满足您的用例。

答案 2 :(得分:0)

您可以为字段`type`命名(在反引号中),这可能有助于解决关键字已经占用的字段名称问题。