【问题标题】:Unable to match node containing forward-slash (/) using jackson library无法使用 jackson 库匹配包含正斜杠 (/) 的节点
【发布时间】:2020-04-18 15:38:33
【问题描述】:

如果 JSON 键包含 /(也用作 at 方法的语法中的分隔符),我无法使用 jackson JSONNode#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

【问题讨论】:

    标签: java json string jackson unicode-escapes


    【解决方案1】:

    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 节中的示例。

    【讨论】:

      猜你喜欢
      • 2019-05-11
      • 2021-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-30
      • 2021-10-14
      • 1970-01-01
      相关资源
      最近更新 更多