У меня есть большой файл, содержащий действительный вложенный json на каждой строке, каждый json выглядит (реальные данные намного больше, поэтому этот мир json будет показан для иллюстрации только):.get метод для вложенного json не работает
{"location":{"town":"Rome","groupe":"Advanced",
"school":{"SchoolGroupe":"TrowMet", "SchoolName":"VeronM"}},
"id":"145",
"Mother":{"MotherName":"Helen","MotherAge":"46"},"NGlobalNote":2,
"Father":{"FatherName":"Peter","FatherAge":"51"},
"Study":[{
"Teacher":["MrCrock","MrDaniel"],
"Field":{"Master1":["Marketing", "Politics", "Philosophy"],
"Master2":["Economics", "Management"], "ExamCode": "1256"}
}],
"season":["summer","spring"]}
Мне нужно разобрать этот файл, чтобы извлечь только некоторые ключевые значения из каждого JSON, чтобы получить dataframe, который должен выглядеть как:
Groupe Id MotherName FatherName Master2
Advanced 56 Laure James Economics, Management
Middle 11 Ann Nicolas Web-development
Advanced 6 Helen Franc Literature, English Language
Я использую method proposed me in the other question.get
но он не работает wi го вложенного JSON, так, например, если я стараюсь:
def extract_data(data):
""" convert 1 json dict to records for import"""
dummy = {}
jfile = json.loads(data.strip())
return (
jfile.get('Study', dummy).get('Field', np.nan).get('Master1',np.nan),
jfile.get('location', dummy).get('groupe', np.nan))
для этой линии jfile.get('Study', dummy).get('Field', np.nan).get('Master1', np.nan)
он бросает мне ошибку:
AttributeError: 'list' object has no attribute 'get'
, очевидно, это происходит потому, что значение "Study"
не словарь, ни список , но действительный json! как я могу справиться с этой проблемой? Существует ли метод, который работает как .get, но для json? Я думаю, есть еще один вариант: декодировать этот json, а затем разобрать его с помощью .get
, но проблема в том, что он находится в ядре другого json, поэтому я не знаю, как его декодировать!
Вместо цепочки последнего вызова 'get' вы можете проверить, то, что вы получаете под ключом «Мастер1», является списком, а затем получает все значения списка или, альтернативно, одно значение, если значение «Мастер1» не является списком –
Кстати, вы могли бы исправить «get (« Master1 », 'np.nan) 'to' get (' Master1 ', np. nan) 'в вашем посте? –
@YannisP. не могли бы вы уточнить, как я могу его реализовать, пожалуйста? Мир кода, метод? – Amanda