Reputation: 23
I want to put Json-File data in to individual variables. So I can use the variables for otherthings. Im able to create a Json-file from inputs from a other QDialog. The next move is to get the inputs back out of the Json-File and insert it into individual variables. So json:Line1 into self.line1Config and so on.
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()
With the code below, it wont work:
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\";")
The Error Code:
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
Upvotes: 0
Views: 1096
Reputation: 85
You have here two problems:
json.loads needs a string and not a path. Change it to:
with open(self.jsonfile) as jsonfile:
data = json.load(jsonfile)
You have forgotten your "Config" Level in your JSON structure:
for daten in data["Config"]:
self.line1Config = daten['Line1']
self.line2Config = daten['Line2']
self.line3Config = daten['Line3']
I created a minimal working example for you: https://www.online-python.com/ZoGQWjlehI
Upvotes: 1
Reputation: 10699
Since the JSON document comes from a file specifically from self.jsonfile = str(self.tn+'.json')
, then use json.load()
instead of json.loads()
:
Deserialize s (a str, bytes or bytearray instance containing a JSON document) to a Python object
Deserialize fp (a
.read()
-supporting text file or binary file containing a JSON document) to a Python object
Change this line:
data = json.loads(self.jsonfile)
To
with open(self.jsonfile) as opened_file:
data = json.load(opened_file)
Upvotes: 1