首页 > 解决方案 > 在 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 上观看了一些视频并阅读了很多主题,但我找不到解决方案。希望有人能帮助我。

谢谢!

标签: pythonjson

解决方案


文件的每一行都不是有效的JSON字符串,因为JSON字符串文字使用双引号。此解决方案使用JSON.

您可以使用literal_evalfrom 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.

请参阅 ast.literal_eval 的文档


推荐阅读