У меня есть куча данных JSON из сообщений Facebook, подобных приведенному ниже:
{"from": {"id": "8", "name": "Mary Pinter"}, "message": "How ARE you?", "comments": {"count": 0}, "updated_time": "2012-05-01", "created_time": "2012-05-01", "to": {"data": [{"id": "1543", "name": "Honey Pinter"}]}, "type": "status", "id": "id_7"}
Данные JSON частично структурированы, и все это не одно и то же. Ниже мой код:
import json
str = '{"from": {"id": "8", "name": "Mary Pinter"}, "message": "How ARE you?", "comments": {"count": 0}, "updated_time": "2012-05-01", "created_time": "2012-05-01", "to": {"data": [{"id": "1543", "name": "Honey Pinter"}]}, "type": "status", "id": "id_7"}'
data = json.loads(str)
post_id = data['id']
post_type = data['type']
print(post_id)
print(post_type)
created_time = data['created_time']
updated_time = data['updated_time']
print(created_time)
print(updated_time)
if data.get('application'):
app_id = data['application'].get('id', 0)
print(app_id)
else:
print('null')
#if data.get('to'):
#... This is the part I am not sure how to do
# Since it is in the form "to": {"data":[{"id":...}]}
Я хочу, чтобы код печатал to_id как 1543, иначе печатал 'null'
Я не знаю, как это сделать.
in
проверки и отсутствуютraise
ли они? Просто войдите в него без проверки, и вы получите точно такое же поведение (за исключением того, чтоKeyError
вместо aValueError
).Если все, что вам нужно, это проверить, существует ли ключ или нет
Если вы хотите проверить, есть ли значение для ключа
Вернуть значение по умолчанию, если фактическое значение отсутствует
источник
Рекомендуется создавать вспомогательные служебные методы для подобных вещей, чтобы всякий раз, когда вам нужно изменить логику проверки атрибутов, они были в одном месте, а код был более читабельным для последователей.
Например, создайте вспомогательный метод (или класс
JsonUtils
со статическими методами) вjson_utils.py
:а затем используйте его в своем проекте:
ВАЖНАЯ ЗАМЕТКА:
Есть причина, по которой я использую
data.get(attribute) or default_value
вместо простогоdata.get(attribute, default_value)
:В моих приложениях получение атрибута со значением 'null' равносильно отсутствию атрибута вообще. Если ваше использование отличается, вам необходимо это изменить.
источник
Попытайся:
Или, если вы просто хотите пропустить значения с отсутствующими идентификаторами вместо печати
'null'
:Так:
Конечно, в реальной жизни вам, вероятно, не нужен
print
каждый идентификатор, а нужно хранить их и что-то с ними делать, но это уже другая проблема.источник
источник
Я написал для этого крошечную функцию. Не стесняйтесь перепрофилировать,
источник