是否有一种方法可以使用机器人或Python代码从JSON数组获得特定的值?



JSON OUTPUT:

${response}= [
{
"Name":"7122Project",
"checkBy":[
{
"keyId":"NA",
"target":"1232"
}
],
"Enabled":false,
"aceess":"123"
},
{
"Name":"7122Project",
"checkBy":[
{
"keyId":"_GU6S3",
"target":"123"
}
],
"aceess":"11222",
"Enabled":false
},
{
"Name":"7122Project",
"checkBy":[
{
"keyId":"-1lLUy",
"target":"e123"
}
],
"aceess":"123"
}
]

需要从json中获得keyId值而不使用硬编码索引使用机器人?

我做

${ID}=    set variable    ${response[0]['checkBy'][0]['keyId']}

但是我需要检查长度获取所有keyID值并存储不包含NA的值我如何使用机器人框架检查长度和使用for循环?

我想你可以有更多的元素在checkBy数组,像这样:

response = [
{
"Name":"7122Project",
"checkBy": [
{
"keyId": "NA",
"target": "1232"
}
],
"Enabled": False,
"aceess": "123"
},
{
"Name": "7122Project",
"checkBy": [
{
"keyId": "_GUO6g6S3",
"target": "123"
}
],
"aceess": "11222",
"Enabled": False
},
{
"Name": "7122Project",
"checkBy": [
{
"keyId": "-1lLlZOUy",
"target": "e123"
},
{
"keyId": "test",
"target": "e123"
}
],
"aceess": "123"
}
]

那么你可以在Python中键入所有keyId,代码如下:

def get_key_ids(response):
checkbys = [x["checkBy"] for x in response]
key_ids = []
for check_by in checkbys:
for key_id in check_by:
key_ids.append(key_id["keyId"])
return key_ids
对于上面的例子,它将返回:['NA', '_GUO6g6S3', '-1lLlZOUy', 'test_NA'].

您希望同时获得带有NA和不带有NA的id,因此也许您可以稍微更改函数:

def get_key_ids(response, predicate):
checkbys = [x["checkBy"] for x in response]
key_ids = []
for check_by in checkbys:
for key_id in check_by:
if predicate(key_id["keyId"]):
key_ids.append(key_id["keyId"])
return key_ids

,像这样使用:

get_key_ids(response, lambda id: id == "NA")     # ['NA']
get_key_ids(response, lambda id: id != "NA")     # ['_GUO6g6S3', '-1lLlZOUy', 'test_NA']
get_key_ids(response, lambda id: "NA" in id)     # ['NA', 'test_NA']
get_key_ids(response, lambda id: "NA" not in id) # ['_GUO6g6S3', '-1lLlZOUy']

现在只需要创建一个库并将其导入RF。你可以从官方文档中获得灵感。

但是我需要检查长度获取所有keyID值并存储不包含NA的值

我不完全明白你在搞什么鬼。你指的是keyId字符串的长度吗,比如"和它的长度为2,或响应中的keyid的数量?

如何使用机器人框架检查长度和使用for循环?

你可以使用关键字Should Be Equal *从BuiltIn库。for循环的一些例子可以在这里的用户指南中找到。

现在你应该有了完成任务所需的所有部分,你可以试着把它们放在一起。

最新更新