json.dump()和json.load()相关问题

import json


def greet_user():
    filename = 'username.json'
    try:
        with open(filename) as python:
            username = json.load(python)
    except FileNotFoundError:
        username = input("What's you name?")
        with open(filename, 'w') as python:
            json.dump(username, python)
            print("We'll remember you when you come back, " + username + "!")
    else:
        print("Welcome back, " + username + "!")


greet_user()

这是《python编程从入门到实践》第十章中的一段代码,在我的机器中运行一直报错。
到底是哪里有问题,这个错误类型是什么意思?

Traceback (most recent call last):
  File "/home/yfwh/PycharmProjects/2years/python/lis.py", line 18, in <module>
    greet_user()
  File "/home/yfwh/PycharmProjects/2years/python/lis.py", line 8, in greet_user
    username = json.load(python)
  File "/usr/lib/python3.7/json/__init__.py", line 296, in load
    parse_constant=parse_constant, object_pairs_hook=object_pairs_hook, **kw)
  File "/usr/lib/python3.7/json/__init__.py", line 348, in loads
    return _default_decoder.decode(s)
  File "/usr/lib/python3.7/json/decoder.py", line 337, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/usr/lib/python3.7/json/decoder.py", line 355, in raw_decode
    raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

Process finished with exit code 1

用json.load()读取文件对象,代码中用法没有问题,问题可能在你的json文件格式,看看是否符合json文本格式规范。参考这里:

t,json

{
    "name":"123"
}

代码:

import json
 
def greet_user():
    filename = 't.json'
    try:
        with open(filename) as python:
            username = json.load(python)['name']
    except FileNotFoundError:
        username = input("What's you name?")
        with open(filename, 'w') as python:
            json.dump({"name":username}, python)
            print("We'll remember you when you come back, " + username + "!")
    else:
      print("Welcome back, " + username + "!")
 
greet_user()

运行结果:

F:\2021\qa\ot2>t1
Welcome back, 123!

是不是json文件格式不对。贴一下看看