gpt4 book ai didi

json - 如何验证 JSON 中是否存在 JSON 路径

转载 作者:行者123 更新时间:2023-12-04 08:03:52 25 4
gpt4 key购买 nike

在给定的 json 文档中,如何验证 json 路径是否存在?

我正在使用 jayway-jsonpath并有以下代码

JsonPath.read(jsonDocument, jsonPath)

上面的代码可能会抛出以下异常

com.jayway.jsonpath.PathNotFoundException: No results for path: $['a.b.c']



为了缓解它,我打算在尝试使用 读取之前验证路径是否存在。 JsonPath.read

作为引用,我浏览了以下 2 个文档,但无法真正得到我想要的。
  • http://www.baeldung.com/guide-to-jayway-jsonpath
  • https://github.com/json-path/JsonPath
  • 最佳答案

    虽然确实可以捕获异常,但就像注释中提到的那样,可能有一种更优雅的方法来检查路径是否存在,而无需在整个代码中编写 try catch 块。

    您可以将以下配置选项与 jayway-jsonpath 一起使用:

    com.jayway.jsonpath.Option.SUPPRESS_EXCEPTIONS

    此选项处于事件状态时不会引发异常。如果您使用 read 方法,则只要找不到路径,它就会简单地返回 null。

    这是 JUnit 5 和 AssertJ 的示例展示如何使用此配置选项,避免仅用于检查 json 路径是否存在的 try/catch 块:
    @ParameterizedTest
    @ArgumentsSource(CustomerProvider.class)
    void replaceStructuredPhone(JsonPathReplacementArgument jsonPathReplacementArgument) {
    DocumentContext dc = jsonPathReplacementHelper.replaceStructuredPhone(
    JsonPath.parse(jsonPathReplacementArgument.getCustomerJson(),
    Configuration.defaultConfiguration().addOptions(Option.SUPPRESS_EXCEPTIONS)),
    "$.cps[5].contactPhoneNumber", jsonPathReplacementArgument.getUnStructuredPhoneNumberType());
    UnStructuredPhoneNumberType unstructRes = dc.read("$.cps[5].contactPhoneNumber.unStructuredPhoneNumber");
    assertThat(unstructRes).isNotNull();
    // this path does not exist, since it should have been deleted.
    Object structRes = dc.read("$.cps[5].contactPhoneNumber.structuredPhoneNumber");
    assertThat(structRes).isNull();
    }

    关于json - 如何验证 JSON 中是否存在 JSON 路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43362556/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com