有没有办法使用robot或Python代码从JSON数组中获取特定值?

2024-06-28 20:59:25 发布

您现在位置:Python中文网/ 问答频道 /正文

JSON输出:

${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值,而不使用robot硬编码索引吗

是的

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

但我需要检查长度,获取所有keyID值,并存储不包含NA的值 如何使用robot框架检查循环的长度和用途


Tags: namejsonfalsetarget编码responserobotenabled
1条回答
网友
1楼 · 发布于 2024-06-28 20:59:25

我想在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。你可以从official documentation中获得灵感

But I need to check the length get all keyID values and store the values that dose not contain NA

我不完全明白你在干什么。您是指keyId字符串的长度,如“NA”及其长度2,还是响应中的keyId数

How can I do check length and use for loop using robot framework?

您可以使用内置库中的关键字^{}。在用户指南here中可以找到for循环的一些示例

现在,您应该拥有完成任务所需的所有部分,您可以尝试将它们组合在一起

相关问题 更多 >