我有以下JSON,我想提取其中所有的電子郵件。該 JSON 是由 AWS cognito 匯出的,我無法控制它的結構。
expected_value = ""{
"Users"。[
{
"Username"。"testUserName1"。
"Attributes"。[
{
"Name": "testName1"。
"Value": "[email protected]"
}
],
"UserCreateDate": "20210913T11。 16:02. 627000 01:00",
"UserLastModifiedDate"。"20210913T11。 16:02. 627000 01:00",
"Enabled": true,
"UserStatus": "UNCONFIRMED"
},
{
"Username": "testUsername2"。
"Attributes"。[
{
"Name": "testEmail2"。
"Value": "[email protected]"
}
],
"UserCreateDate": "20210219T11。 52:52. 465000 00:00",
"UserLastModifiedDate"。"20210219T11。 52:52. 465000 00:00",
"Enabled": true,
"UserStatus": "UNCONFIRMED"
}
]
}"""
我有下面的代碼,我現在把json作為預期值輸入:
我有下面的代碼,我現在把json作為預期值輸入。
def lambda_handler(event, context)。
data = json.dumps(expected_value)
y = json.load(data)
email = y['Users'][0]['Attributes'][0]
但是我得到了以下的錯誤:
{}。
"errorMessage": "string indices must be integers",
"errorType": "TypeError",
"requestId": "622258cc-8248-4901-8a39-fc6e0a24229c",/span>
"stackTrace": [/span>
" File "/var/task/lambda_function.py", line 145, in lambda_handler
email = y['Users'][0]['Attributes'][0]['Value']
"/span>
]
}
我搞不清楚我做錯了什么
。按照要求,一個REPREX,它仍然拋出了錯誤:
uj5u.com熱心網友回復:
user_list = [] 。
for item in json:
users_list.append(item['Users'][0]['Attributes']['Value'] )
因為這里的'Attributes'是一個字典的串列[/p>
uj5u.com熱心網友回復:
想提取其中所有的電子郵件
lambda事件應該已經是JSON格式,IIRC
。正如錯誤所說,你需要使用數字來索引串列,或者在整個串列上使用for-each回圈
。emails = [] []
for user in event.get('Users', [] )。) # assuming event is already a dict.
for a in user.get('Attributes', [] )。)
# 可能還想得到Name欄位,并檢查該屬性實際上是一個電子郵件。
v = a.get('Value')
if v:
emails.append(v)
print(emails)
uj5u.com熱心網友回復:
下面的代碼對我來說是有效的。注意我洗掉了你目前問題中的資料的轉儲和多載。
import json
def lambda_handler(event, context)。
data = json.load(event)
email = data['Users'][0]['Attributes'][0] ['Value']
print(f'{email=}') # -> email='[email protected]'
事件 = '''
{
"用戶"。[
{
"用戶名": "testUserName1",
"屬性": [
{
"名稱": "testName1",
"值": "[email protected]"
}
],
"UserCreateDate": "2021-09-13T11:16:02.627000 01:00",
"UserLastModifiedDate": "2021-09-13T11:16:02.627000 01:00",
"Enabled": true,
"UserStatus": "UNCONFIRMED"
},
{
"用戶名": "testUsername2",
"屬性": [
{
"名稱": "testEmail2",
"值": "[email protected]"
}
],
"UserCreateDate": "2021-02-19T11:52:52.465000 00:00",
"UserLastModifiedDate": "2021-02-19T11:52:52.465000 00:00",
"Enabled": true,
"UserStatus": "UNCONFIRMED"
}
]
}
'''
lambda_handler(event, None)
uj5u.com熱心網友回復:
看看已經顯示的代碼,expected_value變數的值已經是一個JSON格式的字串。當json.dumps()被應用到它時,該值被 "嵌入 "到另一個(多余的)JSON "層"。
因此,要么從你的expected_value中移除""的三重引號,要么從你的函式中移除json.dumps();在后一種情況下,expected_value應該被直接傳遞給json.load():
def lambda_handler(event, context)。
y = json.load(expected_value)
email = y['Users'][0]['Attributes']['Value']
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/307050.html
標籤:
上一篇:Gremlin。查找兩個節點之間的所有路徑,并將查詢結果轉化為JSON格式
下一篇:從包含JSON的列中剝離字串
