как получить доступ к этим сложным элементам списка словаря

#python #list #dictionary

Вопрос:

 result={"message":"Error logging in for user sana123@gmail.com","status":"Error: [Errno 400 Client Error: Bad Request for url: https://www.googleapis.com/identitytoolkit/v3/relyingparty/verifyPassword?key=xxxx] {n  "error": {n    "code": 400,n    "message": "EMAIL_NOT_FOUND",n    "errors": [n      {n      
  "message": "EMAIL_NOT_FOUND",n        "domain": "global",n        "reason": "invalid"n      }n    ]n  }n}n"}

 

для доступа к значению ключа «сообщение» мы будем использовать :

 result['message']
 

Но как мне получить доступ :

  1. «сообщение»: «EMAIL_NOT_FOUND»
  2. «причина»: «недействительно»

Ответ №1:

Часть result["status"] -это закодированное в Json сообщение. Чтобы расшифровать его, сначала удалите Errno: деталь, а затем используйте json.loads . Например:

 import json

result = {
    "message": "Error logging in for user sana123@gmail.com",
    "status": 'Error: [Errno 400 Client Error: Bad Request for url: https://www.googleapis.com/identitytoolkit/v3/relyingparty/verifyPassword?key=xxxx] {n  "error": {n    "code": 400,n    "message": "EMAIL_NOT_FOUND",n    "errors": [n      {n      "message": "EMAIL_NOT_FOUND",n        "domain": "global",n        "reason": "invalid"n      }n    ]n  }n}n',
}

data = json.loads("{"   result["status"].split("] {", maxsplit=1)[-1])
for error in data["error"]["errors"]:
    print(error["message"])
    print(error["reason"])
 

С принтами:

 EMAIL_NOT_FOUND
invalid
 

Ответ №2:

result['message'] содержит текст и строку JSON, сначала вам нужно извлечь часть JSON, а затем проанализировать строку (с помощью собственной библиотеки json ).

 import json
json_string = result['status'][result['status'].find('{'):]
data = json.loads(json_string)
 

Тогда data будет следующее dict .

 {'error': {'code': 400,
  'message': 'EMAIL_NOT_FOUND',
  'errors': [{'message': 'EMAIL_NOT_FOUND',
    'domain': 'global',
    'reason': 'invalid'}]}}