1

我正在尝试使用 jcouchdb (https://code.google.com/p/jcouchdb/) 从 Java 访问我的 CouchDB 实例。我有一些我想解析成 Java 类的 JSon 文档 - 使用 Svenson,在 jcouchdb 中使用,然后将这些解析的对象放入 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() {

}

(setter 和 getter 的身体被故意移除)

解析时的错误是:

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 库?

4

1 回答 1

3

您将 note 声明为 java.lang.String:

public String getNote()

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

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

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

于 2011-03-21T21:56:05.517 回答