Couchbase:如何从 java 对象创建 JsonObject
Couchbase: How to create JsonObject from a java Object
如何轻松地将 convert/parse 对象 Java 转换为 JSON 实例对象 com.couchbase.client.java.document.json.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
简单的值对它,你getString
,getInt
,等等...从它。
请注意,JsonObject 只接受一组有限的类型:
null、String、Integer、Long、Double、Boolean、JsonObject 或 JsonArray。
如果你想存储域对象,目前最受支持的方法是将它们编组为 JSON 字符串(使用你喜欢的 Jackson、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。
GitHub上的项目:
https://github.com/jloisel/reactive-couchbase
如何轻松地将 convert/parse 对象 Java 转换为 JSON 实例对象 com.couchbase.client.java.document.json.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
简单的值对它,你getString
,getInt
,等等...从它。
请注意,JsonObject 只接受一组有限的类型: null、String、Integer、Long、Double、Boolean、JsonObject 或 JsonArray。
如果你想存储域对象,目前最受支持的方法是将它们编组为 JSON 字符串(使用你喜欢的 Jackson、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。
GitHub上的项目: https://github.com/jloisel/reactive-couchbase