繁体   English   中英

打开带有多个词典的.json文件

[英]open a .json file with multiple dictionaries

我有一个我无法用python解决的问题,它可能非常愚蠢,但是我没有设法自己找到解决方案。

我有一个.json文件,用于存储模拟结果。 结果存储为一系列字典,例如

{"F_t_in_max": 709.1800264942982, "F_t_out_max": 3333.1574129603068, "P_elec_max": 0.87088836042046958, "beta_max": 0.38091242406098391, "r0_max": 187.55175182942901, "r1_max": 1354.8636763521174, " speed ": 8}
{"F_t_in_max": 525.61428305710433, "F_t_out_max": 2965.0538075438467, "P_elec_max": 0.80977406754203796, "beta_max": 0.59471606595464666, "r0_max": 241.25371753877008, "r1_max": 688.61786996066826, " speed ": 9}
{"F_t_in_max": 453.71124051199763, "F_t_out_max": 2630.1763649193008, "P_elec_max": 0.64268078173342935, "beta_max": 1.0352896471221695, "r0_max": 249.32706230502498, "r1_max": 709.11415981343885, " speed ": 10}

我想打开文件并访问值来绘制“ r0_max”作为“速度”的函数,但是除非只有一个字典,否则我无法打开。 我用

with open('./results/rigid_wing_opt.json') as data_file:    
    data = json.load(data_file) 

但是当文件包含多个词典时,出现错误

ValueError:额外数据:第5行第1列-第6行第1列(字符217-431)

如果输入数据与提供的数据完全相同,那么您应该能够使用json.load解释每个字典。 如果每个字典都在自己的行上,那么这应该足够了:

with open('filename', 'r') as handle:
    json_data = [json.loads(line) for line in handle]

我建议逐行读取文件,并将每行独立转换为字典。

您可以使用以下代码将每一行放入列表中:

import ast
# Read all lines into a list
with open(fname) as f:
    content = f.readlines()

# Convert each list item to a dict
content = [ ast.literal_eval( line ) for line in content ]

或更短的版本在同一行上执行列表理解:

import ast
# Read all lines into a list
with open(fname) as f:
    content = [ ast.literal_eval( l ) for l in f.readlines() ] 

{...} {...}不是正确的json。 它是两个JSON对象,以空格分隔。 除非您可以更改输入文件的格式以更正此错误,否则建议您尝试一些其他操作。 如果数据像示例中那样简单,则可以执行以下操作:

with open('filename', 'r') as handle:
    text_data = handle.read()
    text_data = '[' + re.sub(r'\}\s\{', '},{', text_data) + ']'
    json_data = json.loads(text_data)

即使您的字典不在单独的行上,这也应该起作用。

那是无效的JSON。 您不能在顶层拥有多个对象,而不能用列表将它们包围起来并在它们之间插入逗号。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM