所以,我能够回答我之前关于如何从 JSON 数组中获取 JSON 的值的问题。但现在我正在尝试用 Python 转换它(用于硒)。
这是 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
也尝试在
for loop
中使用for loop
:
def get_id():
messages = ClassName.get_messages()
message_title = "Open this message"
for json_item in messages:
for message_item in json_item:
if message_item["subject"] == message_title:
print("Message id is " + str(message_item["id"]))
return message_item["id"]
break
我能够使用此代码打印
subject
。我如何在 Python 中使用索引? print(messages[0]["subject"])
@staticmethod
def get_id():
messages = ClassName.get_messages()
message_title = "Open this message"
# print(messages)
print(messages[0]["subject"])
# for item in messages:
# if messages[item]["subject"] == message_title:
# print("Message id is " + messages[item]["id"])
# return messages[item]["id"]
# break
你所拥有的问题是连接部分。你不能将一个字符串连接到一个 int 所以在你的循环中你应该将 id 转换为字符串:
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
经过这些调整后,您最终解析的代码工作正常。
如果这不能解决您的问题,请在
messages
函数中打印 get_id
变量并更新您的问题,因为错误出在 api 调用或格式化响应中,而不是在解析它时。
非常感谢@pr1nc3 帮助我!由于返回
None
,因此在变量中分配 JSON 值时出现问题。不知道为什么我们有 None
但我重构了代码并将其合并为 1(感谢这个策略 @pr1nc3 :))。
这是工作代码
def get_id():
url = "https://uri.io/api/accounts/fdsdfs/inboxes/dfsfds/messages/"
headers = {
"Content-Type": "application/json;charset=utf-8",
"Api-Token": "123345dsfgsdrgf3456dfg5634dfv5"
}
messages = requests.get(url=url, headers=headers).json()
message_title = "Open this message"
for item in messages:
if item["subject"] == message_title:
return item["id"]
break