无法使用 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 节中的示例。
如果 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 节中的示例。