Karate框架如何通过==匹配获取嵌套JSON的Condition11值
问题描述
待处理的JSON数据如下(原始数据存在部分字符串引号未闭合的语法笔误,已修正为标准JSON格式):
{ "TestA": [ { "Condition1": "Value1", "Condition2": "Value2", "Condition3": "Value3" } ], "TestB": [ { "Condition11": "Value11", "Condition12": "Value12", "Condition13": "Value13" } ], "TestC": [ { "Condition21": "Value21", "Condition22": "Value22", "Condition23": "Value23" } ] }
要求仅使用==等值匹配(不使用contains方法),获取Condition11字段对应的取值Value11。以下两种尝试均失效,执行后会返回完整的嵌套JSON结构:
- 尝试1:
TestB.Condition11 == "Value11",无匹配结果 - 尝试2:
TestB.Condition11[0] == "Value11",无匹配结果
根因分析
两种写法失效的核心原因是字段访问顺序错误:TestB的字段类型是数组,必须先通过索引定位到数组内的具体元素对象,才能读取对象上的自定义属性。
- 第一种写法直接在数组类型字段后点取内部属性,本质是访问数组对象本身的内置静态属性,完全没有触达数组内存储的业务对象,自然拿不到
Condition11的值 - 第二种写法把数组索引写在了属性名
Condition11的后面,访问逻辑完全颠倒,不可能匹配到目标值
正确写法
将数组索引紧跟在数组字段TestB之后,先定位到数组第0位存储的对象,再访问该对象上的Condition11属性做等值判断即可,代码如下:
TestB[0].Condition11 == "Value11"
该写法适配绝大多数JSON解析引擎、JSONPath规则、低代码逻辑判断场景,匹配成功后即可精准获取目标值Value11,不会返回全量嵌套结构。
内容的提问来源于stack exchange,提问作者Sriharsha Karanth
相关产品推荐
相关产品推荐

