我有一些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
}
然而,我仍然在寻找如何做它的“正确”的方式
1条答案
按热度按时间iih3973s1#
像这样用
JsonPath.parse()
方法:这是否比捕获异常更高效,可能取决于实现。如果你选择
DEFAULT_PATH_LEAF_TO_NULL
然后简单地遇到一个不存在的叶子null
否则,将引发异常。在处理数量较少的案件时,这种差异可能并不明显,但如果这种情况经常发生,事情可能会累加起来。