Python,将JsonData放入变量中

2024-10-03 21:27:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我想将Json文件数据放入各个变量中。所以我可以把这些变量用于其他事情。我能够从其他QDialog的输入创建Json文件。下一步是从Json文件中获取输入,并将其插入到各个变量中。 所以json:Line1转换为self.line1Config,依此类推

self.jsonfile = str(self.tn+'.json')

def WriteJSON(self):

    self.NewConfigJSON = {}
    self.NewConfigJSON['configs'] = []
    self.NewConfigJSON['configs'].append({
        'Line1':  str(self.CreatNewJsonW.Line1),
        'Line2':  str(self.CreatNewJsonW.Line2),
        'Line3':  str(self.CreatNewJsonW.Line3)
    })
    jsonString = json.dumps(self.NewConfigJSON)
    jsonFile = open(self.jsonfile, 'w')
    jsonFile.write(jsonString)
    jsonFile.close()

使用下面的代码,它将无法工作:

  def CheckIfJsonFileIsAlreadyThere(self):
    try:
        if os.path.isfile(self.jsonfile) == True:
            data = json.loads(self.jsonfile)

            for daten in data:
                self.line1Config = daten['Line1']
                self.line2Config = daten['Line2']
                self.line3Config = daten['Line3']
        else:
            raise Exception
         
    except Exception:
        self.label_ShowUserText("There are no configuration yet. Please create some 
        configuartions")
        self.label_ShowUserText.setStyleSheet("color: black; font: 12pt \"Arial\";")

错误代码:

Traceback (most recent call last):
  File "c:\path", line 90, in CheckIfJsonFileIsAlreadyThere
    data = json.loads(self.jsonfile)
  File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.9_3.9.1776.0_x64__qbz5n2kfra8p0\lib\json\__init__.py", line 346, in loads
    return _default_decoder.decode(s)
  File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.9_3.9.1776.0_x64__qbz5n2kfra8p0\lib\json\decoder.py", line 340, in decode
    raise JSONDecodeError("Extra data", s, end)
json.decoder.JSONDecodeError: Extra data: line 1 column 11 (char 10)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "c:\path", line 38, in <module>
    MainWindow = mainwindow()
  File "path", line 21, in __init__
    self.d = Generator_Dialog(self)
  File "c:\path", line 55, in __init__
    self.CheckIfJsonFileIsAlreadyThere()
  File "c:path", line 100, in CheckIfJsonFileIsAlreadyThere
    self.label_ShowUserText("There are no configuration yet. Please create some configuartions")
TypeError: 'QLabel' object is not callable 

Tags: 文件pathinselfjsondatalinefile
2条回答

由于JSON文档来自特定于self.jsonfile = str(self.tn+'.json')的文件,因此请使用json.load()而不是json.loads()

  • json.loads

    Deserialize s (a str, bytes or bytearray instance containing a JSON document) to a Python object

  • json.load

    Deserialize fp (a .read()-supporting text file or binary file containing a JSON document) to a Python object

更改此行:

data = json.loads(self.jsonfile)

with open(self.jsonfile) as opened_file:
    data = json.load(opened_file)

这里有两个问题:

  1. json.loads需要字符串,而不是路径。将其更改为:

    with open(self.jsonfile) as jsonfile:
         data = json.load(jsonfile)
    
  2. 您忘记了JSON结构中的“配置”级别:

     for daten in data["Config"]:
          self.line1Config = daten['Line1']
          self.line2Config = daten['Line2']
          self.line3Config = daten['Line3']
    

我为您创建了一个最小的工作示例:https://www.online-python.com/ZoGQWjlehI

相关问题 更多 >