Robot Framework如何通过已知值获取JSON中的指定字段值
在Robot Framework中根据JSON特定值提取对应字段的方法
问题场景
已知如下JSON数组数据,需要提取名称为Focus的汽车对应的type字段值:
[ { "Manuafacture": "BMW", "Engine": [ { "volume": 3, "filter": 222, "name": "Turbo-dd" } ], "name": "320", "type": "333-44-12" }, { "Manuafacture": "Ford", "Engine": [ { "volume": 2, "filters": 1111, "name": "doch" } ], "name": "Focus", "type": "444-55-33" }, { "Manuafacture": "Audi", "Engine": [ { "volume": 3, "filters": 444, "name": "TFSI" } ], "name": "A6", "type": "999-88-77" } ]
之前尝试的${GetType}= Get Value From Json ${CarList.json()} $..type[?($.name=Focus)]写法无法正确提取,原因是JSONPath表达式逻辑错误,下面给出两种可行解决方法:
方法一:使用正确的JSONPath表达式
正确的JSONPath需要先筛选出name等于Focus的对象,再提取其type字段,具体语句如下:
# 先获取完整的JSON数组(如果${CarList}是RequestsLibrary的响应对象) ${json_data}= Get Value From Json ${CarList} $ # 提取目标type值 ${focus_type}= Get Value From Json ${json_data} $[?(@.name=='Focus')].type
或者直接合并为一行:
${focus_type}= Get Value From Json ${CarList.json()} $[?(@.name=='Focus')].type
表达式说明:
$表示根节点(这里是整个数组)[?(@.name=='Focus')]:过滤数组中当前节点(@指代当前遍历的对象)的name字段等于字符串'Focus'的元素.type:提取筛选后对象的type字段值
方法二:循环遍历提取(适合JSONPath不熟练的场景)
如果对JSONPath语法不太熟悉,可以通过遍历数组对象的方式实现:
${json_data}= Get Value From Json ${CarList} $ ${focus_type}= Set Variable ${EMPTY} FOR ${car} IN @{json_data} ${car_name}= Get Value From Json ${car} $.name IF "${car_name}" == "Focus" ${focus_type}= Get Value From Json ${car} $.type Exit For Loop END END # 输出结果 Log 名称为Focus的汽车类型:${focus_type}
内容的提问来源于stack exchange,提问作者SamiM
相关产品推荐
相关产品推荐

