首页 > 解决方案 > ## 运算符对 JSON 对象的行为

问题描述

该问题与此处提出的解决方案严格相关我可以对 JSON 对象使用 ## 操作吗?建议使用 ## 运算符来评估 JSON 对象是否为空。建议的解决方案是使用一些条件替换,所以

* def data = { a: 'hello', b: null, c: null }
* def temp = data.c ? { baz: data.c } : null
* def json = { foo: '#(data.a)', bar: '#(data.b)', jsonObject: '##(temp)' }
* match json == { foo: 'hello', bar: null }

如果 data.c 等于 null,则此解决方案可以完美运行,但如果 data.c 设置为某个值,例如

 * def data = { a: 'hello', b: null, c: 'world' }
 * def temp = data.c ? { baz: data.c } : null
 * def json = { foo: '#(data.a)', bar: '#(data.b)', jsonObject: '##(temp)' }
 * match json == { foo: 'hello', bar: null, jsonObject:{baz:'world'}}

失败是因为

 actual: '##(temp)', expected: {baz=world}.

换句话说,## 运算符似乎无法正确识别 temp 变量中的 json 对象。请注意,如果 temp 变量的计算结果为 null,则该解决方案是否可以正常工作。我做错了什么吗?如果没有,是否有一些解决方法?

标签: karate

解决方案


你可以试试空手道 1.1.0.RC5,因为我认为这个版本已经修复了。


推荐阅读