我在开发中使用 vertx 和 Jackson 。在我的一个课程中,我得到了JsonObject
类型的字段,如下所示:
class User
private String name;
private JsonObject details;
此详细信息字段可以包含其他JsonObjects或JsonArrays,例如:
{"details": [{"street": "Broadway"}, {"building": 20}]}
我没有这种结构的专用类,只要没有固定的结构,它可以变化
细节对象的创建方式如下:
JsonObject details = new JsonObject().put("name", "value").put("another", "another")
这个方法允许我存储代码中任何结构的细节。至于我不需要在后端操作这些数据,我不想为它创建一个特殊的结构。
一切正常,直到我尝试使用 Jackson 序列化JsonObject
。不幸的是,杰克逊没有使用美丽的JSON字符串,而是将map
对象序列化为所有地图的附加字段。
如何使用杰克逊序列化 vertx 的JsonObject
?
答案 0 :(得分:1)
查看JsonObject's javadoc,我看到了getMap()
方法。我知道杰克逊能够轻松地序列化地图。
答案 1 :(得分:0)
最后,事实证明 vertx 已经拥有了自己的Serializer实现。 仅仅使用他们的类来执行序列化(将使用杰克逊卧底)就足够了。
JsonObject user = new JsonObject(Json.encode(new User());
它运作正常。
答案 2 :(得分:0)
我建议使用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
需要时间。