jcouchdb:svenson无法解析json字符串

时间:2011-03-21 08:19:09

标签: java couchdb json svenson

我正在尝试使用jcouchdb(https://code.google.com/p/jcouchdb/)从Java访问我的CouchDB实例。我有一些JSon文档,我想解析为Java类 - 使用在jcouchdb中使用的Svenson,然后将这些解析的对象放入DB中。我使用AVRO(http://avro.apache.org)JSon Encoder生成这个JSON对象,它们似乎没问题,但显然其他解析器也有问题。

我的JSon字符串看起来像这样:

{
   "id":40,
   "event_id":"48764322212",
   "note":{
      "string":"ABC note"
   },
   "created_date":null,
   "event_category":null,
   "city":null,
   "address":null
}

这似乎是有效的JSON - 使用http://jsonformatter.curiousconcept.com/验证

然而,我的Svenson对象定义如下:

public class Note {

    Long id;
    String eventId;
    String note;
    String createdDate;
    String eventCategory;
    String city;
    String address;

    @JSONProperty()
    public Long getId() {

    @JSONProperty("event_id")
    public String getEventId() {

    @JSONProperty("note")
    public String getNote() {

    @JSONProperty("created_date")
    public String getCreatedDate() {

    @JSONProperty("event_category")
    public String getEventCategory() {

    @JSONProperty("city")
    public String getCity() {

    @JSONProperty("address")
    public String getAddress() {

}

(故意删除了设置者和吸气者的身体)

解析时的错误是:

Cannot set property string on class java.lang.String

似乎正确解析了这个JSON( note 字段有区别):

{
   "id":40,
   "event_case_id":"000-123123123",
   "event_msisdn":"48764322212",
   "note":"Planowana data portacji: 2011/01/27 11:42:49",
   "created_date":null,
   "event_category":null,
   "city":null,
   "address":null
}

我该如何解决这个问题?也许还有另一个json库对我有用吗?

1 个答案:

答案 0 :(得分:3)

您将注释声明为java.lang.String:

public String getNote()

但在JSON中,您将其声明为具有名为“string”的属性的对象:

"note":{
  "string":"ABC note"
}

您需要更改JSON或Bean以相互匹配。例如,在第二个正在运行的JSON中,您将JSON注释声明为字符串。这就是它运作的原因。