在JSON中不存在JSON路径时将返回什么?

时间:2018-01-12 07:08:48

标签: json groovy jsonpath

我们有以下JSON: -

def json='''{
"widget": {
    "debug": "on",
    "window": {
        "title": "Sample Konfabulator Widget",
        "name": "main_window",
        "width": 500,
        "height": 500
    },
    "image": {
        "src": "Images/Sun.png",
        "name": "sun1",
        "hOffset": 250,
        "vOffset": 250,
        "alignment": "center"
    },
    "text": {
        "data": "Click Here",
        "size": 36,
        "style": "bold",
        "name": "text1",
        "hOffset": 250,
        "vOffset": 100,
        "alignment": "center",
        "onMouseUp": "sun1.opacity = (sun1.opacity / 100) * 90;"
       }
   }
}'''

要检查JSON中是否存在路径,我使用的是com.jayway.jsonpath.JsonPath Refer for more

以下是我正在使用的代码: -

import groovy.json.*
import static com.jayway.jsonpath.JsonPath.parse
import static com.jayway.jsonpath.Criteria.where;
import static com.jayway.jsonpath.Filter.filter;
import com.jayway.jsonpath.Configuration
import com.jayway.jsonpath.JsonPath
import com.jayway.jsonpath.spi.json.JacksonJsonNodeJsonProvider
import com.jayway.jsonpath.spi.mapper.JacksonMappingProvider

def path = "\$.widget.image.src"
def value = parse(json).read(path).toString()
log.info value

因为,“path”存在于JSON内部。所以它会将值返回为“Images / Sun.png”,如果JSON中没有这条路径怎么办: -

看一下这段代码: -

 def path = "\$.widget.image.src1"
 def value = parse(json).read(path).toString()
 log.info value

错误如下: -

com.jayway.jsonpath.PathNotFoundException : no results for path: $['widget']['image']['src1']

但是现在,我有许多路径需要验证,如果路径不匹配,它将在脚本中间失败并且路径的其余部分将不会被验证..如何使用groovy处理这个事情?

如果我使用if / else,并且传递为NULL ..它没有得到验证,并且脚本在该步骤失败。

2 个答案:

答案 0 :(得分:0)

使用groovy的try / catch和final关键字,我们可以处理这些事情。

答案 1 :(得分:0)

您可以将其返回为null,以更改您的配置

def path = "\$.widget.image.src1"
def value = parse(json).using(Configuration.builder()
              .options(Option.DEFAULT_PATH_LEAF_TO_NULL).build())
              .read(path).toString()
log.info value