Couchbase:如何从java对象创建JsonObject
问题描述:
如何轻松将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)
答
在Couchbase的JsonObject
意味着作为非常基本的API与JSON一起使用,接近Map
:您put
si它的值很多,你getString
,getInt
,等等...从它。请注意,在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
中使用!
答
我在Java 2.x Couchbase客户端之上做了一个非常简单的库,它允许同步执行CRUD操作,以及异步执行(通过RxJava)。
它演示了如何使用Jackson对存储在Couchbase上的bean进行序列化/反序列化。
在我的代码我使用:JSONObject的节点= JacksonTransformers.MAPPER.convertValue(测试,JsonObject.class);而不是:JsonObject node = mapper.convertValue(test,JsonObject.class);它的工作。 但龙没有这种方式工作... 我得到:-621171454而不是1425307970818 – 2015-03-02 14:53:05
啊所以这个技巧是不是工作那么好呃...但它不是真正的预期用途无论如何。编辑我的答案 – 2015-03-02 18:20:35