Search code examples
pythonjsonjsondecodeerror

JSONDecodeError when trying to write to JSON file


I have a json file where each entry has a corresponding list. This is what it looks like:

{
    "/home/onur/PycharmProjects/file-tagging/data/world_building_budget.txt": [],
    "/home/onur/PycharmProjects/file-tagging/data/data3/world_elements.png": [],
    "/home/onur/PycharmProjects/file-tagging/data/data3/data4/world.bmp": [],
    "/home/onur/PycharmProjects/file-tagging/data/data2/world_files.pdf": [],
    "/home/onur/PycharmProjects/file-tagging/data/world_saving_budget.jpg": [],
    "/home/onur/PycharmProjects/file-tagging/a.txt": [],
    "/home/onur/PycharmProjects/file-tagging/venv/.gitignore": [],
    "/home/onur/PycharmProjects/file-tagging/venv/lib/python3.9/site-packages/_virtualenv.pth": [],
    "/home/onur/PycharmProjects/file-tagging/venv/lib/python3.9/site-packages/six-1.16.0.dist-info/LICENSE": [],
    "/home/onur/PycharmProjects/file-tagging/venv/lib/python3.9/site-packages/six-1.16.0.dist-info/WHEEL": [],
    "/home/onur/PycharmProjects/file-tagging/venv/lib/python3.9/site-packages/six-1.16.0.dist-info/RECORD": [],
    "/home/onur/PycharmProjects/file-tagging/venv/lib/python3.9/site-packages/six-1.16.0.dist-info/INSTALLER": [],
    "/home/onur/PycharmProjects/file-tagging/venv/lib/python3.9/site-packages/six-1.16.0.dist-info/top_level.txt": [],
    "/home/onur/PycharmProjects/file-tagging/venv/lib/python3.9/site-packages/six-1.16.0.dist-info/METADATA": [],
    "/home/onur/PycharmProjects/file-tagging/venv/lib/python3.9/site-packages/pytz/tzfile.py": [],
...
}

I am trying to append data into that list like this:

with open('content-log.json', 'w+') as f:
    json_data = json.load(f)

    for key in json_data:
        if filter in key:
            dict_tag = json_data[key]
            print(key, type(dict_tag))
            print(tag)
            dict_tag.append(tag)

And this is the error:

Traceback (most recent call last):
  File "/home/onur/PycharmProjects/file-tagging/main.py", line 59, in <module>
    json_data = json.load(json_file)
  File "/usr/lib/python3.9/json/__init__.py", line 293, in load
    return loads(fp.read(),
  File "/usr/lib/python3.9/json/__init__.py", line 346, in loads
    return _default_decoder.decode(s)
  File "/usr/lib/python3.9/json/decoder.py", line 337, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/usr/lib/python3.9/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)

Where am I going wrong?


Solution

  • Read, manipulate, write:

    with open('content-log.json', 'r') as f:
        json_data = json.load(f)
    
    for key in json_data:
        if filter in key:
            json_data[key].append(tag)
    
    with open('content-log.json', 'w') as f:
        json.dump(json_data, f)