【问题标题】:What will be returned when the JSON path is not present inside JSON?当 JSON 中不存在 JSON 路径时会返回什么?
【发布时间】:2019-01-25 01:24:29
【问题描述】:

我们有以下 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

由于“路径”存在于 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 传递.. 它没有得到验证,并且脚本在该步骤失败。

【问题讨论】:

  • 您是在问我们如何在 groovy 中捕获异常? groovy-lang.org/semantics.html#_exception_handling
  • 是的,有点。由于我得到的错误是一个对话框。如果它在日志中打印一些东西,比如“路径不存在”,那么我们可以使用 if else 处理它
  • @JBNizet - 嘿,谢谢,使用 try catch,它起作用了。

标签: json groovy jsonpath


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    您可以将其返回为 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-15
      相关资源
      最近更新 更多