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

如何在Robot Framework中获取JSON数组长度?遇KeyError报错

Robot Framework获取JSON数组长度报错解决

问题场景

执行以下Robot Framework代码时,第一行解析JSON正常,但获取数组长度时触发KeyError:

${json_object}    evaluate        json.loads('''${sn_booking_payload}''' , strict=False)    json
${answers_count}    Get Length    ${json_object["$.preBookAnswers.answers[0]"]}

报错信息:

Resolving variable '${json_object["$.preBookAnswers.answers[0]"]}' failed: KeyError: '$.preBookAnswers.answers[0]'

目标JSON片段(需获取preBookAnswers下answers数组的长度):

"preBookAnswers": {
    "answers": [
                    {
                        "entityId": "2bfd67b0-a315-4dd1-b3e1-ce1d417e9cf9",
                        "userInput": "",
                        "itemIds": [],
                        "answers": [
                            {
                                "item": "Customer Meeting",
                                "value": "",
                                "description": ""
                            }
                        ],
                        "customFieldType": "QUESTION",
                        "questionDisplayText": "Reason for Travel"
                    },
                    {
                        "entityId": "ec376e47-b7d7-47f5-811d-90430eae02f8",
                        "userInput": "",
                        "itemIds": [],
                        "answers": [
                            {
                                "item": "J123",
                                "value": "",
                                "description": ""
                            }
                        ],
                        "customFieldType": "QUESTION",
                        "questionDisplayText": "DP Code"
                    }
    ],
    "preBookQuestionResponseId": ""
}

错误原因

json.loads解析后得到的${json_object}是Python字典对象,不支持JSONPath语法($.preBookAnswers.answers[0]是JSONPath写法)。代码中把JSONPath字符串当成字典的key去访问,自然会触发KeyError。

修正方案

直接用Python字典的嵌套访问语法,逐层获取目标数组后再取长度:

方案1:分步获取

${json_object}    evaluate        json.loads('''${sn_booking_payload}''' , strict=False)    json
# 先取出answers数组
${answers_array}    evaluate    ${json_object["preBookAnswers"]["answers"]}
# 再获取数组长度
${answers_count}    Get Length    ${answers_array}

方案2:直接链式访问

${json_object}    evaluate        json.loads('''${sn_booking_payload}''' , strict=False)    json
${answers_count}    Get Length    ${json_object["preBookAnswers"]["answers"]}

两种方式都能正确拿到answers数组的长度(示例中为2)。

内容的提问来源于stack exchange,提问作者Christian Dayao Corp

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 15:45:57