python - 在 Python 中没有键的情况下遍历 JSON
问题描述
首先:我真的找不到任何有相同问题的线程,所以我决定开一个新的。
我不知道如何遍历没有键的 JSON 文档。
我有一个这种格式的文件:
{'name': 'Bryan', 'age': 34, 'male': True, 'hometown': 'Boston'}
{'name': 'Anna', 'age': 25, 'male': False, 'hometown': 'Chicago'}
{'name': 'Jeff', 'age': 47, 'male': True, 'hometown': 'Vancouver'}
{'name': 'Maria', 'age': 58, 'male': False, 'hometown': 'Madrid'}
......
......
问题是,通常 JSON 文档在大括号前面有“键”,例如:
{
"student1:" {'name': 'Bryan', 'age': 34, 'male': True, 'hometown': 'Boston'}
"student2:" {'name': 'Anna', 'age': 25, 'male': False, 'hometown': 'Chicago'}
"student3:" {'name': 'Jeff', 'age': 47, 'male': True, 'hometown': 'Vancouver'}
"student4:" {'name': 'Maria', 'age': 58, 'male': False, 'hometown': 'Madrid'}
}
我不知道,如何在没有“student1”之类的键的情况下访问单个姓名或年龄。我想列出一个列表,只有名字和一个单独的年龄列表。
我今天在 Youtube 上观看了一些视频并阅读了很多主题,但我找不到解决方案。希望有人能帮助我。
谢谢!
解决方案
文件的每一行都不是有效的JSON
字符串,因为JSON
字符串文字使用双引号。此解决方案不使用JSON
.
您可以使用literal_eval
from package ast
,它可以安全地评估由以下 Python 文字结构组成的字符串:字符串、字节、数字、元组、列表、字典、集合、布尔值和无。
from ast import literal_eval
with open('test.json1') as f:
for line in f:
d = literal_eval(line)
print(d['name'])
印刷:
Bryan
Anna
Jeff
Maria
etc.