我從我的 API 得到以下輸出:
{
'Type': 'Notification',
'MessageId': 'xxx',
'TopicArn': 'xxx',
'Subject': 'xxx',
'Message': 'EventType=Delete, FriendlyType=was deleted, '
'Timestamp=2021-11-08T15:30:45Z, UserId=1111, [email protected], '
'IPAddr=(empty), AccountId=22222, AccountName=test-account, '
'ProjectId=test-project',
'Timestamp': '2021-11-08T15:30:46.214Z',
'SignatureVersion': '1'
}
現在我想訪問"Message"變數 - 一旦我進入,并獲得以下輸出(在前面提到的 JSON 中已經可見):
EventType=Delete, FriendlyType=was deleted, Timestamp=2021-11-08T15:30:45Z, UserId=1111, [email protected], IPAddr=(empty), AccountId=22222, AccountName=test-account, ProjectId=test-project
我現在如何訪問 EventType、FriendlyType 等鍵?我假設我必須首先將此輸出轉換為有效的 JSON,但我目前感到困惑。
uj5u.com熱心網友回復:
您可以決議字串拆分,然后使用它來創建字典。也許這不是最好的解決方案,但它是一個簡單的解決方案。
response = {
'Type': 'Notification',
'MessageId': 'xxx',
'TopicArn': 'xxx',
'Subject': 'xxx',
'Message': 'EventType=Delete, FriendlyType=was deleted, Timestamp=2021-11-08T15:30:45Z, UserId=1111, [email protected], IPAddr=(empty), AccountId=22222, AccountName=test-account, ProjectId=test-project',
'Timestamp': '2021-11-08T15:30:46.214Z',
'SignatureVersion': '1'
}
keyVals = [el.split('=') for el in response['Message'].split(', ')]
subdict = {}
for key,val in keyVals:
subdict[key] = val
uj5u.com熱心網友回復:
正如其中一個答案中提到的,您可以決議您的Message字串,但我也覺得這不是最佳解決方案。我注意到您的 JSON 格式不正確。有關您應該從 API 獲得的正確 JSON,請參見下文。
{
"Type": "Notification",
"MessageId": "xxx",
"TopicArn": "xxx",
"Subject": "xxx",
"Message": {
"EventType": "Delete",
"FriendlyType": "was deleted",
"Timestamp": "2021-11-08T15:30:45Z",
"UserId": "1111",
"UserName": "[email protected]",
"IPAddr": "(empty)",
"AccountId": "22222",
"AccountName": "test-account",
"ProjectId": "test-project"
},
"SignatureVersion": "1"
}
一旦您能夠獲得此輸出,您就可以進一步訪問嵌套物件。例如,要訪問FriendlyTypefrom Message,您可以簡單地說,body.Message.FriendlyType。body這里是指你的整個 JSON 物件。
uj5u.com熱心網友回復:
如果您無法將 Message 資料作為 JSON 接收,則處理這種情況的一種方法是將message字串轉換為 dict <key>:<value>:
message_as_dict = dict(map(lambda var: var.strip().split("=") ,message.split(",")))
注意了.strip(),為了消除對鍵開始的空間。
這應該創建一個具有以下結構的字典:
{'EventType': 'Delete', 'FriendlyType': 'was deleted', 'Timestamp': '2021-11-08T15:30:45Z', 'UserId': '1111', 'UserName': '[email protected]', 'IPAddr': '(empty)', 'AccountId': '22222', 'AccountName': 'test-account', 'ProjectId': 'test-project'}
然后您可以訪問這些值,例如:
print(message_as_dict["UserName"])
> me@me.com
uj5u.com熱心網友回復:
您可以通過將'Message'字串拆分為 (key, value) 對并從中構建字典來實作:
from pprint import pprint
output = {'Type': 'Notification',
'MessageId': 'xxx',
'TopicArn': 'xxx',
'Subject': 'xxx',
'Message': 'EventType=Delete, FriendlyType=was deleted, '
'Timestamp=2021-11-08T15:30:45Z, UserId=1111, [email protected], '
'IPAddr=(empty), AccountId=22222, AccountName=test-account, '
'ProjectId=test-project',
'Timestamp': '2021-11-08T15:30:46.214Z',
'SignatureVersion': '1'}
msg_dict = dict(pair.split('=') for pair in output['Message'].split(', '))
pprint(msg_dict, sort_dicts=False)
輸出:
{'EventType': 'Delete',
'FriendlyType': 'was deleted',
'Timestamp': '2021-11-08T15:30:45Z',
'UserId': '1111',
'UserName': '[email protected]',
'IPAddr': '(empty)',
'AccountId': '22222',
'AccountName': 'test-account',
'ProjectId': 'test-project'}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/353742.html
