Python 我能';t读取JSON文件并从中获取数据

Python 我能';t读取JSON文件并从中获取数据,python,python-3.x,Python,Python 3.x,我想建立一个价值观的基石​​在JSON中。一切都应该通过输入控制台的参数来完成。也就是说,数据首先写入文件,然后必须从文件中读取 输入:python storage.py--key\u name--value\u name 输出:python storage.py--key\u name 具有参数的函数和具有数据输入功能的函数。但是我的文件读取功能有问题。我需要按键的值打印它​​如果有几个 记录的JSON如下所示: {"key": "Pepe", "value": "Pepeyaya"}{"ke

我想建立一个价值观的基石​​在JSON中。一切都应该通过输入控制台的参数来完成。也就是说,数据首先写入文件,然后必须从文件中读取

输入:
python storage.py--key\u name--value\u name

输出:
python storage.py--key\u name

具有参数的函数和具有数据输入功能的函数。但是我的文件读取功能有问题。我需要按键的值打印它​​如果有几个

记录的JSON如下所示:

{"key": "Pepe", "value": "Pepeyaya"}{"key": "PepeHug", "value": "KekeHug"}{"key": "Pepega", "value": "Kekega"}{"key": "Pepe", "value": "Keke"}
data = json.loads(f.read())
data = json.loads([f.read()])
[]{"key": "Pepe", "value": "Pepeyaya"}{"key": "PepeHug", "value": "KekeHug"}{"key": "Pepega", "value": "Kekega"}{"key": "Pepe", "value": "Keke"}
我试着像这样读取文件:

{"key": "Pepe", "value": "Pepeyaya"}{"key": "PepeHug", "value": "KekeHug"}{"key": "Pepega", "value": "Kekega"}{"key": "Pepe", "value": "Keke"}
data = json.loads(f.read())
data = json.loads([f.read()])
[]{"key": "Pepe", "value": "Pepeyaya"}{"key": "PepeHug", "value": "KekeHug"}{"key": "Pepega", "value": "Kekega"}{"key": "Pepe", "value": "Keke"}
但是错误是完全一样的

在其他类似的主题中,我看到JSON中的“字典”被写入列表。我试过这样的方法:

{"key": "Pepe", "value": "Pepeyaya"}{"key": "PepeHug", "value": "KekeHug"}{"key": "Pepega", "value": "Kekega"}{"key": "Pepe", "value": "Keke"}
data = json.loads(f.read())
data = json.loads([f.read()])
[]{"key": "Pepe", "value": "Pepeyaya"}{"key": "PepeHug", "value": "KekeHug"}{"key": "Pepega", "value": "Kekega"}{"key": "Pepe", "value": "Keke"}
结果:

TypeError: the JSON object must be str, bytes or bytearray, not list
AttributeError: 'list' object has no attribute 'read'
此外:

结果:

TypeError: the JSON object must be str, bytes or bytearray, not list
AttributeError: 'list' object has no attribute 'read'
我试图更改录制功能,但我无法将所有内容写入预先创建的词典,所有内容都写入词典的右侧。大概是这样的:

{"key": "Pepe", "value": "Pepeyaya"}{"key": "PepeHug", "value": "KekeHug"}{"key": "Pepega", "value": "Kekega"}{"key": "Pepe", "value": "Keke"}
data = json.loads(f.read())
data = json.loads([f.read()])
[]{"key": "Pepe", "value": "Pepeyaya"}{"key": "PepeHug", "value": "KekeHug"}{"key": "Pepega", "value": "Kekega"}{"key": "Pepe", "value": "Keke"}
代码:

如有要求,我需要:

python storage.py --key Pepe

获取Pepe和PepeYaya值

这是一种基本的存储方法,这种方法对于大型json文件来说非常糟糕,但它是一个示例,展示了如何完成这项工作

import os
import sys
import json

# storage.py key_name value

key =sys.argv[1]
value = sys.argv[2]
data_path = "data.json"

if os.path.isfile(data_path):
    with open("data.json") as target:
        json_data = json.load(target)
else:
    json_data = {}

json_data[key] = value

with open("data.json", "w") as target:
    json.dump(json_data, target)

在您的情况下,问题是因为在打开文件时append标志被禁用。如果需要编写一个新对象,则需要删除json的最后一个“}”,然后添加一个“、object”项,然后再次添加“}”字符

查看您的输出文件,它不是有效的JSON文件。它包含多个紧挨着的JSON对象。如果你想解析它,你需要写出一个包含所有这些对象的数组,而不仅仅是随机添加一个空数组。您只需将两个json对象放在一起,这是无效的json,因为您只能有一个父对象。您可以将整个json内容读取到一个列表中,在本机python中附加dict并再次写入文件,或者至少换行以获得“json行”。