2015-03-02 111 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