python json.decoder.jsondeCoderror在写入json时出错

python json.decoder.jsondeCoderror在写入json时出错,python,json,Python,Json,我尝试像这样用python编写一个空的json文件 def add_to_json(name, price): data = {str(name): str(price)} with open("produse.json", 'r+', encoding="utf-8") as file: json_file = json.load(file) json_file.update(data) f

我尝试像这样用python编写一个空的json文件

def add_to_json(name, price):
    data = {str(name): str(price)}
    with open("produse.json", 'r+', encoding="utf-8") as file:
        json_file = json.load(file)
        json_file.update(data)
        file.seek(0)
        json.dump(json_file, file)

当我运行代码时,我收到一些奇怪的错误消息:
json.decoder.JSONDecodeError:期望值:第1行第1列(char 0)
。我想可能是来自
json.load()

您只需检查文件是否为空:

import json


def add_to_json(name, price):
    newObject = {str(name): str(price)}
    with open("produse.json", 'r+', encoding="utf-8") as file:
        data = file.read().strip()  # Just to be safe: Remove all whitespaces.
        json_file = json.loads(
            data or '{}'
        )  # data evaluates to None if empty. If None use a empty JSON string!
        json_file.update(newObject)
        file.seek(0)
        json.dump(json_file, file)


add_to_json('foo', '2.0')
# Verify:
print(open("produse.json", 'r').read())
输出:


您只需检查文件是否为空:

import json


def add_to_json(name, price):
    newObject = {str(name): str(price)}
    with open("produse.json", 'r+', encoding="utf-8") as file:
        data = file.read().strip()  # Just to be safe: Remove all whitespaces.
        json_file = json.loads(
            data or '{}'
        )  # data evaluates to None if empty. If None use a empty JSON string!
        json_file.update(newObject)
        file.seek(0)
        json.dump(json_file, file)


add_to_json('foo', '2.0')
# Verify:
print(open("produse.json", 'r').read())
输出:


如果您给出完整的异常,那么它将解释导致错误的行。您的
produse.json
可能不是一个真正的json文件。您的
produse.json
文件的前3行是什么?事实上,我认为该文件是空的。@RobertSeaman该文件是空的。如果该文件是空的,则无需读取和转换,因此
json.load()
会给出此错误。也许您应该首先将其作为普通字符串读取,并且仅当字符串不为空时才使用
json.loads(string)
。或者使用try/except来捕获它。如果您给出了完整的异常,那么它将解释导致错误的行。您的
produse.json
可能不是一个真正的json文件。您的
produse.json
文件的前3行是什么?事实上,我认为该文件是空的。@RobertSeaman该文件是空的。如果该文件是空的,则无需读取和转换,因此
json.load()
会给出此错误。也许您应该首先将其作为普通字符串读取,并且仅当字符串不为空时才使用
json.loads(string)
。或者使用try/except来捕捉它。谢谢!这就是问题所在。谢谢!这就是问题所在。