Новое в разработке и python и пытаюсь создать файл json.
Я пытаюсь создать список людей с указанием времени начала, времени адаптации и времени инцидента:
import datetime
import random
import math
import json
import numpy as np
# generate list of candidates
cand = input("Enter number of candidates: ")
cand = int(cand)
startRange = 0.06 # standard deviation (scale)
startTime = 9.30 #mean (loc)
onboardRange = 0.5
onboardTime = 4.5
incidenceRatio = [0,0,0,0,1] #1 in 5 chance an incident arises
def calCan(): # creates a dictionary of candidates with start times, onboarding, incident times.
candattr = []
candidates = {"candidates":candattr}
a = 1
while a <= cand:
b = np.random.normal(loc=startTime, scale=startRange, size=(1, 1)) # startime
c = np.random.normal(loc=onboardTime, scale=onboardRange, size=(1, 1)) # onboarding time
d = random.choice(incidenceRatio) * np.random.normal(loc=onboardTime, scale=onboardRange, size=(1, 1)) # incident time - random.choice(incidenceRatio) - takes a random selection from incidenceRation list defined above.
btime = datetime.time(int(b//1),int(math.ceil(100 * (59 * (b % 1))/100)), 0)#converts bnum into time
ctime = datetime.time(0,int(c//1),int(math.ceil(100 * (59 * (c % 1))/100)))
dtime = datetime.time(0,int(d//1) ,int(math.ceil(100 * (59 * (d % 1))/100)))
candattr.append({
"name": "candidate {}".format(a),
"startTime": "{}".format(btime),#json doesn't recognize time so have to store as a string
"onboardTime": "{}".format(ctime),
"incidentTime": "{}".format(dtime)
})
a = a + 1
return candidates
И затем я пытаюсь поместить это в Json.
Я могу заставить JSON печатать просто отлично, используя
candidateList = calCan()
print(json.dumps(candidateList, indent=4))
, он возвращает что-то вроде этого:
{
"candidates": [
{
"name": "candidate 1",
"startTime": "09:17:00",
"onboardTime": "00:03:37",
"incidentTime": "00:04:04"
},
{
"name": "candidate 2",
"startTime": "09:16:00",
"onboardTime": "00:04:19",
"incidentTime": "00:00:00"
},
{
"name": "candidate 3",
"startTime": "09:15:00",
"onboardTime": "00:04:13",
"incidentTime": "00:03:25"
}
]
}
но когда я пытаюсь манипулировать им, используя json .loads с
candidateList = calCan()
candidateList = str(candidateList)
data = json.loads((candidateList)
, я получаю всевозможные ужасные ошибки, которые я не могу придумать ни хвоста:
Traceback (most recent call last):
File "queue.py", line 56, in <module>
data = json.loads(candidateList)
File "C:\Users\Gordon Rose\AppData\Local\Programs\Python\Python38\lib\json\__init__.py", line 357, in loads
return _default_decoder.decode(s)
File "C:\Users\Gordon Rose\AppData\Local\Programs\Python\Python38\lib\json\decoder.py", line 337, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "C:\Users\Gordon Rose\AppData\Local\Programs\Python\Python38\lib\json\decoder.py", line 353, in raw_decode
obj, end = self.scan_once(s, idx)
json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line 1 column 2 (char 1)
Если я попытаюсь добавить двойные кавычки в (список кандидатов):
data = json.loads("candidateList")
Это все равно никуда меня не приведет
Traceback (most recent call last):
File "queue.py", line 56, in <module>
data = json.loads(("candidateList"))
File "C:\Users\Gordon Rose\AppData\Local\Programs\Python\Python38\lib\json\__init__.py", line 357, in loads
return _default_decoder.decode(s)
File "C:\Users\Gordon Rose\AppData\Local\Programs\Python\Python38\lib\json\decoder.py", line 337, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "C:\Users\Gordon Rose\AppData\Local\Programs\Python\Python38\lib\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)
Следуя некоторым советам, приведенным ниже - я перестал преобразовывать список кандидатов в строку и вместо этого использую json .load.
candidateList = calCan()
data = json.load(candidateList)
это возвращает:
Traceback (most recent call last):
File "queue.py", line 56, in <module>
data = json.load(candidateList)
File "C:\Users\Gordon Rose\AppData\Local\Programs\Python\Python38\lib\json\__init__.py", line 293, in load
return loads(fp.read(),
AttributeError: 'dict' object has no attribute 'read'