如何将 JsonObject 列表从 google json 转换为 Jackson 的 JsonNode 对象

问题描述 投票:0回答:2

我有一个来自 google JSON 库的

JsonObject
列表,然后我需要调用一个第三方库,它接受来自 Jackson 库的
JsonNode
对象。

我对 JSON 没有太多经验,并且一直在阅读这些内容,并且从 this 链接知道

JsonNode
是一个抽象类,因此无法创建它,看起来我必须使用
ObjectNode
来存储/转换
JsonObject
但看起来需要一些解析才能做到这一点。

如何将

JsonObject
转换为
ObjectNode

java json jackson gson
2个回答
4
投票

可以通过以下代码实现:

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);
}

1
投票

从性能/优雅的角度来看,字符串化策略不是很好,因为你做了很多无用的工作。

相反,您可以使用

dev.voigon:gson-jackson-interop
(参见 https://github.com/liorsl/gson-jackson-interop)将 Jackson 树对象转换为 Gson 树对象。

像这样使用它:

        JsonElement gsonElement = gson.toJsonTree(myObject);
        JsonNode jacksonNode = NodeConverter.gsonToJackson(gsonElement);
© www.soinside.com 2019 - 2024. All rights reserved.