You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 20:45:08