【问题标题】:Jsonpath how to select this json with inner json nodeJsonpath如何使用内部json节点选择这个json
【发布时间】:2021-10-14 05:44:02
【问题描述】:

Jsonpath 对我来说是新的,我倾向于这个。我只能选择name 作为$.name。我不知道如何从这个json中选择employeenametype?谁能告诉我怎么做?

{

"name": "{\r\n  \"employeename\": \"Test  name\"\r\n}\r\n",

" availability": {

    "available": true,

    "type": "private"

},

"is_available": true
}

【问题讨论】:

  • name的值是字符串,不是json对象,不能使用jsonpath提取employeename。您必须先将此字符串"{\r\n \"employeename\": \"Test name\"\r\n}\r\n" 转换为json 对象,然后再提取数据。
  • 刚试过jsonlint.com,它是有效的JSON。
  • 请重新阅读我的评论,我没有说你的 json 无效,我说“键 name 的值是字符串,而不是 json 对象”--> 可以为此使用 jsonpath .
  • 是的,如果我这样做 $.name 我会得到\r\n \"employeename\": \"Test name\"\r\n。但我只想选择employeename 并尝试将值设为Test name
  • 如我所说,你必须先将此字符串转换为 json 对象,然后再提取它。你使用什么语言?

标签: jsonpath json-path-expression


【解决方案1】:

这段代码是:

@Test
void SO_69565621() throws JsonProcessingException {
    String text = "{\n" +
            "  \"name\": \"{\\r\\n  \\\"employeename\\\": \\\"Test  name\\\"\\r\\n}\\r\\n\",\n" +
            "  \" availability\": {\n" +
            "    \"available\": true,\n" +
            "    \"type\": \"private\"\n" +
            "  },\n" +
            "  \"is_available\": true\n" +
            "}";
    String name = JsonPath.read(text, "$.name");
    JsonNode jsonNode = new ObjectMapper().readTree(name);
    MatcherAssert.assertThat(jsonNode.get("employeename").asText(), Matchers.is("Test  name"));
}

我正在使用Jackson将String转换为JsonNode,然后获取这个JsonNode的值。

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.12.4</version>
</dependency>

【讨论】:

    猜你喜欢
    • 2019-01-28
    • 2020-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多