Python 在Robot框架中解析JSON输出[TypeError:预期的字符串或缓冲区]

Python 在Robot框架中解析JSON输出[TypeError:预期的字符串或缓冲区],python,json,dictionary,robotframework,jsonparser,Python,Json,Dictionary,Robotframework,Jsonparser,我有一个JSON输出,如下所示: { "output": { "ParentKey": { "key": "9b92e663a66c0cc1", "id": "uid=26" } } } 我正在尝试获取key的内容,即:9b92e663a66c0cc1 假设${output}具有此JSON内容/数据 这是我尝试的代码: ${va

我有一个JSON输出,如下所示:

{
  "output": {
    "ParentKey": {
      "key": "9b92e663a66c0cc1",
      "id": "uid=26"
    }
  }
}
我正在尝试获取key的内容,即:9b92e663a66c0cc1

假设${output}具有此JSON内容/数据

这是我尝试的代码:

${values}=    Evaluate    json.loads($output)    json
${response}    Evaluate      json.loads($values['output']['ParentKey'])  json
${key}  set variable  ${response['ParentKey']['key']}
[Return]  ${key}
我正在使用较旧的机器人(低于v3.2)

然而,我得到了这样一个错误

计算表达式'json.loads(RF_VAR_值 ['output']['ParentKey'])失败:类型错误:应为字符串 或缓冲器

如何在不出现上述错误的情况下获取密钥

谢谢你


*** Settings ***
*** Variables ***

${our_json}   { "output": { "ParentKey": { "key": "9b92e663a66c0cc1", "id": "uid=26" } } }


*** Test Case ***
Test JSON
  ${values}=    Evaluate    json.loads($our_json)    json
  Log To Console    ${values}
  ${key}  set variable  ${values['output']['ParentKey']['key']}
  Log To Console   OUR KEY: ${key}

产出:

==============================================================================
Test
==============================================================================
Test JSON                                                             .{'output': {'ParentKey': {'key': '9b92e663a66c0cc1', 'id': 'uid=26'}}}
..OUR KEY: 9b92e663a66c0cc1
Test JSON                                                             | PASS |
------------------------------------------------------------------------------
Test                                                                  | PASS |
1 critical test, 1 passed, 0 failed
1 test total, 1 passed, 0 failed
==============================================================================
产出:

==============================================================================
Test
==============================================================================
Test JSON                                                             .{'output': {'ParentKey': {'key': '9b92e663a66c0cc1', 'id': 'uid=26'}}}
..OUR KEY: 9b92e663a66c0cc1
Test JSON                                                             | PASS |
------------------------------------------------------------------------------
Test                                                                  | PASS |
1 critical test, 1 passed, 0 failed
1 test total, 1 passed, 0 failed
==============================================================================

第二个json.loads&evaluates是不必要的,因为一旦将json加载到${valius}中,值就已经是字典,而不是字符串。。很可能您可以删除第二行,并将尝试过的行“response”更改为“values”,我认为这不起作用,“output”变为key,而rest文件中的所有内容变为“output”key的单个value。因此,我认为您无法直接访问这些值!你试过了吗?答案强调了这一点,并且至少对我有用。该数据与您上一个问题中的数据不同@rasjani是正确的,您不需要调用
json.loads
两次。它成功了,谢谢大家!!第二个json.loads&evaluates是不必要的,因为一旦将json加载到${valius}中,值就已经是字典,而不是字符串。。很可能您可以删除第二行,并将尝试过的行“response”更改为“values”,我认为这不起作用,“output”变为key,而rest文件中的所有内容变为“output”key的单个value。因此,我认为您无法直接访问这些值!你试过了吗?答案强调了这一点,并且至少对我有用。该数据与您上一个问题中的数据不同@rasjani是正确的,您不需要调用
json.loads
两次。它成功了,谢谢大家!!