我有一个来自 google JSON 库的
JsonObject
列表,然后我需要调用一个第三方库,它接受来自 Jackson 库的 JsonNode
对象。
我对 JSON 没有太多经验,并且一直在阅读这些内容,并且从 this 链接知道
JsonNode
是一个抽象类,因此无法创建它,看起来我必须使用 ObjectNode
来存储/转换 JsonObject
但看起来需要一些解析才能做到这一点。
如何将
JsonObject
转换为 ObjectNode
?
可以通过以下代码实现:
private JsonNode toJsonNode(JsonObject jsonObject) throws IOException {
return mapper.readTree(jsonObject.toString());
}
要转换回来,您可以使用:
private JsonObject toJsonObject(JsonNode jsonNode) throws IOException {
String jsonString = mapper.writeValueAsString(jsonNode);
JsonParser jsonParser = new JsonParser();
return jsonParser.parse(jsonString).getAsJsonObject();
}
根据您的需求,对于更通用的解决方案,您可以考虑使用
JsonElement
而不是 JsonObject
。该代码与上面显示的代码非常相似:
private JsonNode toJsonNode(JsonElement jsonElement) throws IOException {
return mapper.readTree(jsonElement.toString());
}
private JsonElement toJsonElement(JsonNode jsonNode) throws IOException {
String jsonString = mapper.writeValueAsString(jsonNode);
JsonParser jsonParser = new JsonParser();
return jsonParser.parse(jsonString);
}
从性能/优雅的角度来看,字符串化策略不是很好,因为你做了很多无用的工作。
相反,您可以使用
dev.voigon:gson-jackson-interop
(参见 https://github.com/liorsl/gson-jackson-interop)将 Jackson 树对象转换为 Gson 树对象。
像这样使用它:
JsonElement gsonElement = gson.toJsonTree(myObject);
JsonNode jacksonNode = NodeConverter.gsonToJackson(gsonElement);