我正在尝试从给出的文本文件中加载json对象的列表。当我尝试执行此操作时,出现错误“ json.decoder.JSONDecodeError:额外数据:第1行第14826列(字符14825)”。我相信这是因为每个json对象都用引号引起来并用逗号分隔。
例如我正在读取的文件看起来像这样
"{'name': 'john', age: '17', sex: 'M', 'nums': [2, 3, 4]}","{'name': 'sam', age: '23', sex: 'F', 'nums': [2, 3, 4]}","{'name': 'max', age: '12', sex: 'M', 'nums': [2, 3, 4]}"
我尝试使用json.loads()和ast.literal_eval(),但两者都给了我同样的问题。我还尝试过用替换“,”,没有任何东西看是否能使它成为正确的格式,但是出现了相同的错误。
data = []
with open("raw.txt", encoding = 'utf8') as f:
data = f.read()
data = json.loads(data)
我希望在文本文件中获得所有json对象的列表
答案 0 :(得分:0)
您对ast
模块执行此任务的潜力是正确的。使用您的示例(其中我纠正了sex
和age
键的引用),您似乎没有有效的JSON值,但似乎您具有python dict
的有效表示形式。
data = '''"{'name': 'john', 'age': '17', 'sex': 'M', 'nums': [2, 3, 4]}","{'name': 'sam', 'age': '23', 'sex': 'F', 'nums': [2, 3, 4]}","{'name': 'max', 'age': '12', 'sex': 'M', 'nums': [2, 3, 4]}"'''
通过在此字符串的开始/结尾添加括号,可以将其解析为字符串的tuple
。然后,将每个字符串解析为python dict
:
import ast
b = ast.literal_eval('(' + data + ')')
b = [ast.literal_eval(elem) for elem in b]