Couchbase:如何从java对象创建JsonObject

时间:2015-03-02 10:09:54

标签: java json couchbase

如何轻松地将Java对象转换/解析为一个实例com.couchbase.client.java.document.json.JsonObject的JSON对象?

我试着这样做:

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)

2 个答案:

答案 0 :(得分:6)

Couchbase中的JsonObject是一个非常基本的API,可以使用JSON,接近Mapput个简单值,getStringgetInt等等......来自它。

请注意,JsonObject中只接受一组有限的类型: null,String,Integer,Long,Double,Boolean,JsonObject或JsonArray。

如果你想存储域对象,现在最好的支持方法是将它们编组为JSON字符串(使用你喜欢的Jackson,GSon等的味道......)并使用{{1}存储和检索它们。 }。

从数据库中获取JSON字符串的示例:

RawJsonDocument

编辑:下面的诀窍并没有那么好(例如转换长片的问题)
但这是做你想做的事的诀窍:你可以在RawJsonDocument doc = bucket.get("myKey", RawJsonDocument.class); String jsonValue = doc.content(); MyClass value = unmarshalToMyClass(jsonValue); //this calls eg. Jackson 中使用预配置的杰克逊ObjectMapper

答案 1 :(得分:0)

我在Java 2.x Couchbase客户端上创建了一个非常简单的库,它允许同步执行CRUD操作,也可以异步执行(通过RxJava)。

它展示了如何使用Jackson来序列化/反序列化存储在Couchbase上的bean。

GitHub上的项目: https://github.com/jloisel/reactive-couchbase