Python 即使文件中存在有效的JSON,也无法解码JSON对象
用于将dictionary元素转换为Json并写入文件Python 即使文件中存在有效的JSON,也无法解码JSON对象,python,json,python-2.7,file,dictionary,Python,Json,Python 2.7,File,Dictionary,用于将dictionary元素转换为Json并写入文件 with open(filename,'w') as f: if(os.stat(f).st_size == 0): json.dump(new_data, f) else: data = json.load(f) data.update(new_data)#adding a new dictionary
with open(filename,'w') as f:
if(os.stat(f).st_size == 0):
json.dump(new_data, f)
else:
data = json.load(f)
data.update(new_data)#adding a new dictionary
json.dump(data, f)
我只能向文件中写入一个json。当我想读取现有文件,然后附加另一组字典时,我无法执行此操作
Getting ValueError:无法解码任何JSON对象
json.load(f),json.load(f)您只需首先读取文件(如果存在)。如果它已经是空的,或者包含无效的JSON,或者不存在,则将
数据
初始化为空的dict
(这是更新
方法的标识元素)
然后以写入模式打开文件以写入更新的数据
data.update(new_data)
with open(filename, 'w') as f:
json.dump(data, f)
奇怪的是,我不希望您得到
ValueError
,我希望IOError:文件未打开以供读取。你能提供一个吗?是的,如果我以w+的形式给出open,我将忽略file not open错误,但是每次写入新的json时,即使文件存在于同一位置。以上代码中的打印数据显示无。所以问题是data=json.load(f),这并没有发生。我可以保证f
的大小是0字节,因为在'w'
模式下打开的任何文件都会被截断为0字节。您发布的代码显然不是引发此异常的代码-os.stat()
采用路径,而不是文件
对象-,即使用os.stat(f.name)
替换os.stat(f.name)
,st_size
在这里也将始终为零,因为在写模式下打开的文件会立即被截断。在json.dump(data)之后,我将在文件中包含一个json,下次我需要读取这个json时,(它有一个字典)json.load()并将dict2添加/附加到现有文件中,这就是我面临的问题。这方面有什么帮助吗?这段代码就是这么做的(至少在将忘记的第二个参数添加到json.dump
之后)。不过,目前还不清楚您实际在对这些数据做什么。您正在更新对象({foo:bar}+{hello:world}->{foo:bar,hello:world}
),还是将对象添加到对象数组([{foo:bar}]+{hello:world}]>[{foo:bar},{hello:world}
)?
data.update(new_data)
with open(filename, 'w') as f:
json.dump(data, f)