2011-03-21 82 views
1

我試圖使用jcouchdb(https://code.google.com/p/jcouchdb/)從Java訪問我的CouchDB實例。我有一些JSon文檔需要解析到Java類中 - 使用jcouchdb中的Svenson,然後將這些解析的對象放入數據庫中。我用AVRO(http://avro.apache.org)JSon Encoder生成這個JSON對象,它們似乎沒問題,但顯然其他解析器有問題。jcouchdb:svenson無法解析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/

但是我的史雲遜對象定義是這樣的:

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() { 

} 

(getter和setter方法'身體故意刪除)

錯誤解析時是:

Cannot set property string on class java.lang.String 

看來,這個JSON是正確解析(存在領域有所作爲):

{ 
    "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庫可以爲我工作?

回答

3

您注意到聲明以java.lang.String:

public String getNote() 

但在JSON聲明它作爲一個屬性名爲 「串」 的對象:

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

你需要更改JSON或Bean來匹配對方。例如,在第二個正常運行的JSON中,您將JSON註釋聲明爲一個字符串。這就是它工作的原因。

+0

好吧,這似乎很明顯+錯誤消息。你能否建議我應該如何定義我的bean,以便上面的JSON字符串可以工作?我無法修改Avro生成的json。 – 2011-03-22 08:01:10

+1

我現在無法測試它,但我認爲您應該使用[type selection](http://code.google.com/p/svenson/wiki/TypeSelection)將帶有「string」屬性的對象映射到String 。 – 2011-03-22 08:34:21

+0

好吧,添加一個簡單的:parser.addTypeHint(「。string」,String.class)沒有幫助 - 我應該使用不同的匹配語法嗎? – 2011-03-22 10:26:16