Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 即使文件中存在有效的JSON,也无法解码JSON对象_Python_Json_Python 2.7_File_Dictionary - Fatal编程技术网

Python 即使文件中存在有效的JSON,也无法解码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

用于将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 
                    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)