使用 Jackson 序列化 vertx JsonObject
Serialize vertx JsonObject using Jackson
我在开发中使用 vertx 和 Jackson。在我的一个 classes 中,我得到了一个类型为 JsonObject
的字段,类似这样:
class User
private String name;
private JsonObject details;
此详细信息 字段可以包含其他 JsonObject 或 JsonArray,例如:
{"details": [{"street": "Broadway"}, {"building": 20}]}
我没有这个结构的专用class,因为没有固定的结构,它可以变化。
详细信息 对象的创建方式如下:
JsonObject details = new JsonObject().put("name", "value").put("another", "another")
这种方法允许我在我的代码中存储任何结构的细节。至于我不需要在我的后端操作这些数据,我不想为它创建一个特殊的结构。
一切正常,直到我尝试使用 Jackson 序列化此 JsonObject
。不幸的是,杰克逊没有给我漂亮的 JSON 字符串,而是给了我 map
序列化了所有地图附加字段的对象。
如何使用 Jackson 序列化 vertx 的 JsonObject
?
正在查看 JsonObject's javadoc , I saw a getMap()
方法。我知道 Jackson 能够轻松地序列化地图。
最后,vertx 已经有了它自己的 Serializer 实现。
只用他们的 class 来执行连载就够了(这将使用 Jackson undercover)。
JsonObject user = new JsonObject(Json.encode(new User());
而且效果很好。
我建议像这样使用 https://static.javadoc.io/com.fasterxml.jackson.core/jackson-databind/2.7.3/com/fasterxml/jackson/databind/ObjectMapper.html#convertValue(java.lang.Object,%20java.lang.Class) 创建:
new JsonObject((Map)Json.mapper.convertValue(new User(), Map.class));
来回转换 String
需要时间。
我在开发中使用 vertx 和 Jackson。在我的一个 classes 中,我得到了一个类型为 JsonObject
的字段,类似这样:
class User
private String name;
private JsonObject details;
此详细信息 字段可以包含其他 JsonObject 或 JsonArray,例如:
{"details": [{"street": "Broadway"}, {"building": 20}]}
我没有这个结构的专用class,因为没有固定的结构,它可以变化。
详细信息 对象的创建方式如下:
JsonObject details = new JsonObject().put("name", "value").put("another", "another")
这种方法允许我在我的代码中存储任何结构的细节。至于我不需要在我的后端操作这些数据,我不想为它创建一个特殊的结构。
一切正常,直到我尝试使用 Jackson 序列化此 JsonObject
。不幸的是,杰克逊没有给我漂亮的 JSON 字符串,而是给了我 map
序列化了所有地图附加字段的对象。
如何使用 Jackson 序列化 vertx 的 JsonObject
?
正在查看 JsonObject's javadoc , I saw a getMap()
方法。我知道 Jackson 能够轻松地序列化地图。
最后,vertx 已经有了它自己的 Serializer 实现。 只用他们的 class 来执行连载就够了(这将使用 Jackson undercover)。
JsonObject user = new JsonObject(Json.encode(new User());
而且效果很好。
我建议像这样使用 https://static.javadoc.io/com.fasterxml.jackson.core/jackson-databind/2.7.3/com/fasterxml/jackson/databind/ObjectMapper.html#convertValue(java.lang.Object,%20java.lang.Class) 创建:
new JsonObject((Map)Json.mapper.convertValue(new User(), Map.class));
来回转换 String
需要时间。