jaywayjsonpath在读取不存在的json路径时抛出错误,尽管已配置为

hwazgwia  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(539)

我有一些json是这样的:

{
  "root": {
    "metadata": {
      "name": "Farmer John",
      "hasTractor": false
    },
    "plants": {
      "corn": 137.137,
      "soy": 0.45
    },
    "animals": {
      "cow": 4,
      "sheep": 12,
      "pig": 1
    },
    "family": {
      "isMarried": true
    }
  }
}

我正在使用 JsonPath :

val document = Configuration.defaultConfiguration()
        .addOptions(Option.DEFAULT_PATH_LEAF_TO_NULL)
        .jsonProvider()
        .parse(jsonString): Object
val value = JsonPath.read(document, "$.root.family.hasChild"): Any

但我得到了一个错误:

No results for path: $['root']['family']['hasChild']
com.jayway.jsonpath.PathNotFoundException: No results for path: $['root']['family']['hasChild']
    at com.jayway.jsonpath.internal.path.EvaluationContextImpl.getValue(EvaluationContextImpl.java:133)
    at com.jayway.jsonpath.JsonPath.read(JsonPath.java:187)
    at com.jayway.jsonpath.internal.JsonContext.read(JsonContext.java:102)

我应该得到 null 因为我有配置选项 Option.DEFAULT_PATH_LEAF_TO_NULL 在文档创建代码中设置对吗?但是我却得到了这个错误
编辑:
我只需捕获错误并返回null,就可以让它正常工作,如下所示:

val value = try {
  JsonPath.read(document, "$.root.family.hasChild"): Any
} catch {
  case _: PathNotFoundException => null
}

然而,我仍然在寻找如何做它的“正确”的方式

iih3973s

iih3973s1#

像这样用 JsonPath.parse() 方法:

Configuration configuration = Configuration.builder().options(Option.DEFAULT_PATH_LEAF_TO_NULL).build();
val value = JsonPath.parse(document, configuration).read("$.root.family.hasChild"));

这是否比捕获异常更高效,可能取决于实现。如果你选择 DEFAULT_PATH_LEAF_TO_NULL 然后简单地遇到一个不存在的叶子 null 否则,将引发异常。在处理数量较少的案件时,这种差异可能并不明显,但如果这种情况经常发生,事情可能会累加起来。

相关问题