Python 在Robot框架中解析JSON输出[TypeError:预期的字符串或缓冲区]
我有一个JSON输出,如下所示: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
{
"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
两次。它成功了,谢谢大家!!