2015-03-02 110 views
4

如何輕鬆將Java對象轉換/解析爲作爲實例的JSON對象com.couchbase.client.java.document.json.JsonObject?Couchbase:如何從java對象創建JsonObject

我試着這樣做:

import com.couchbase.client.deps.com.fasterxml.jackson.annotation.JsonProperty; 

public class MyClass { 

@JsonProperty("filed") 
private String filed; 

public MyClass(String filed) { 
    this.filed = filed; 
} 

public String getFiled() { 
    return filed; 
} 

並運行此行與進口:

import com.couchbase.client.deps.com.fasterxml.jackson.databind.ObjectMapper; 
    import com.couchbase.client.java.document.json.JsonObject; 

    ObjectMapper mapper = new ObjectMapper(); 
    MyClass test = new MyClass("a"); 
    JsonObject node = mapper.convertValue(test, JsonObject.class); 

,我也得到:

java.lang.IllegalArgumentException: Unrecognized field "filed" (class com.couchbase.client.java.document.json.JsonObject), not marked as ignorable (one known property: "names"]) 
    at [Source: N/A; line: -1, column: -1] (through reference chain: com.couchbase.client.java.document.json.JsonObject["filed"]) 
at com.couchbase.client.deps.com.fasterxml.jackson.databind.ObjectMapper._convert(ObjectMapper.java:2759) 
at com.couchbase.client.deps.com.fasterxml.jackson.databind.ObjectMapper.convertValue(ObjectMapper.java:2685) 

回答

5

在Couchbase的JsonObject意味着作爲非常基本的API與JSON一起使用,接近Map:您put si它的值很多,你getStringgetInt,等等...從它。請注意,在JsonObject中只接受一組有限的類型:空字符串,整數,長整型,雙精度型,布爾型,JsonObject或JsonArray。

如果你想存儲域對象,現在最好的支持方式是將它們編組爲JSON字符串(使用傑克遜,GSon等的首選風格......)並使用RawJsonDocument存儲和檢索它們。

實例來從數據庫中獲取一個JSON字符串:

RawJsonDocument doc = bucket.get("myKey", RawJsonDocument.class); 
String jsonValue = doc.content(); 
MyClass value = unmarshalToMyClass(jsonValue); //this calls eg. Jackson 

編輯:下面的把戲根本不是那麼大(如問題轉換多頭)
但這裏有一個竅門做什麼你想這樣做:有一個預先配置好的Jackson ObjectMapper,你可以在JacksonTransformers.MAPPER中使用!

+1

在我的代碼我使用:JSONObject的節點= JacksonTransformers.MAPPER.convertValue(測試,JsonObject.class);而不是:JsonObject node = mapper.convertValue(test,JsonObject.class);它的工作。 但龍沒有這種方式工作... 我得到:-621171454而不是1425307970818 – 2015-03-02 14:53:05

+0

啊所以這個技巧是不是工作那麼好呃...但它不是真正的預期用途無論如何。編輯我的答案 – 2015-03-02 18:20:35

0

我在Java 2.x Couchbase客戶端之上做了一個非常簡單的庫,它允許同步執行CRUD操作,以及異步執行(通過RxJava)。

它演示瞭如何使用Jackson對存儲在Couchbase上的bean進行序列化/反序列化。

在GitHub項目: https://github.com/jloisel/reactive-couchbase