Python:如何从JSON数组中获取索引?

dy1byipe  于 2023-03-11  发布在  Python
关注(0)|答案(1)|浏览(147)

因此,我能够回答之前关于如何从JSON数组中获取JSON的值的问题,但现在我尝试在Python中转换它(对于selenium)。
下面是JSON的数组:

[
    {
        "id": 3328367679,
        "inbox_id": 35584,
        "subject": "Open this message"
    },
    {
        "id": 3328364404,
        "inbox_id": 35584,
        "subject": "Another message"
    },
    {
        "id": 3328363502,
        "inbox_id": 35584,
        "subject": "Open this message"
    },
    {
        "id": 3328357254,
        "inbox_id": 35584,
        "subject": "Open this message"
    },
    {
      "id": 3328349654,
      "inbox_id": 35584,
      "subject": "Open this message"
    }
  ]

下面是我的脚本,它在Cypress Javascript中运行,它的工作原理是获取JSON的索引,该索引给出第一个相同的"subject",即"Open this message",然后使用相同的索引返回"id",即3328367679

function getMessageID() {
        cy.request({
            url: Cypress.env('url'),
            method: 'GET',
            headers: {
                'Api-Token': Cypress.env('token'),
                'Content-Type': 'application/json;charset=utf-8'
            },
        })
        .then((response) => {
            expect(response.status).to.eq(200)
            var messages = response.body
            var messageTitle = 'Open this message'
            for (var i = 0; i < messages.length; i++){
                if (messages[i].subject == messageTitle){
                    return messages[i].id
                    break;
                    }
            }
        })
    }
    getMessageID()

我该如何在Python中进行转换呢?这是我当前的脚本,当我打印它的时候,它给了我None的值。我在特性文件中运行get_id,因为它们是连接的:

def get_messages():
    url = "https://uri.io/api/accounts/fdsdfs/inboxes/dfsfds/messages/"
    headers = {
        "Content-Type": "application/json;charset=utf-8",
        "Api-Token": "123345dsfgsdrgf3456dfg5634dfv5"
    }
    response = requests.get(url=url, headers=headers)
    return response.json()

@staticmethod
def get_id():
    messages = ClassName.get_messages()
    message_title = "Open this message"
    for item in messages:
        if item["subject"] == message_title:
            print("Message id is " + item["id"])
            return item["id"]
        break
exdqitrt

exdqitrt1#

问题是连接部分,你不能把一个字符串连接到一个整数,所以在循环中你应该把id转换成string:

message_title = "Open this message"
for item in messages:
    if item["subject"] == message_title:
        print("Message id is " + str(item["id"]))
        return item["id"]
    break

除此之外,如果响应与您在示例顶部发布的响应相同,则不需要return response.json(),您可以使用它,就像return response一样简单
经过这些调整之后,您的代码解析功能最终运行良好。
如果这不能解决您的问题,请打印get_id函数中的messages变量并更新您的问题,因为错误是在api调用或格式化响应中,而不是在解析中。

相关问题