无法使用 jackson 库匹配包含正斜杠 (/) 的节点

Unable to match node containing forward-slash (/) using jackson library

如果 JSON 键包含 /,我无法使用 jackson JSONNode#at 方法匹配节点,/at 方法的语法中也用作分隔符。

例如下面JSON

{
    "message": "Hi",
    "place/json": {
        "name": "World!"
    }
}

我们有密钥 place/json,其中 包括 / 是密钥 的一部分。

如果我使用像

这样的代码
public static void main(String[] args) throws IOException {
    ObjectMapper mapper = new ObjectMapper();
    String jsonHiWorld = "{\"message\":\"Hi\",\"place/json\":{\"name\":\"World!\"}}";
    String message = mapper.readTree(jsonHiWorld).at("/message").asText();
    String place = mapper.readTree(jsonHiWorld).at("/place/json/name").asText();
    System.out.println(message + " " + place); // should print "Hi World!"
}

我得到的输出是:Hi
但期望输出是:Hi World

JSONNode#at 方法使用 JSON 指针匹配 JSON 文档中的节点。要使用 JSON 指针匹配 属性 名称中的 / 字符,您必须将 / 符号替换为 ~1.

尝试替换

    String place = mapper.readTree(jsonHiWorld).at("/place/json/name").asText();

    String place = mapper.readTree(jsonHiWorld).at("/place~1json/name").asText();

另请参阅 RFC 6901 第 5 节中的示例。