我正在使用MQTT从传感器中检索数据,并且正在使用它以便能够在何时启动传感器。然后,我尝试编写一个JSON。
目前,我遇到的问题是,每次将JSON附加新数据时,它还会添加相同的标题。
我正在使用的代码是python和当前脚本,用于在无限循环的函数中写入JSON。
def on_message(client, userdata, msg):
if sensone > 0.275 and sensone < 0.315 and c == 0:
print("Timer Started")
t0 = time.time()
dt0 = datetime.datetime.now()
dt0 = dt0.strftime('%Y-%m-%d %H:%M:%S')
c += 1
if senstwo > 0.275 and senstwo < 0.315 and c == 1:
t1 = time.time()
dt1 = datetime.datetime.now()
dt1 = dt1.strftime('%Y-%m-%d %H:%M:%S')
with open('SensorTimes.json', 'a') as outfile:
datalog = {}
datalog['SensorTimes'] = []
datalog['SensorTimes'].append({
"Start Time":dt0,
"End Time":dt1,
"Total Time":round(t1-t0, 2)
})
json.dump(datalog, outfile, indent=4)
client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
client.connect("172.18.65.123", 1883)
client.loop_forever()
我删除了脚本的不相关部分,我将其全部放在了if语句中,因为如果它不在限制范围之内,我就不想记录数据。
当前输出:
{
"SensorTimes": [
{
"Start Time": "2019-03-28 09:03:10",
"End Time": "2019-03-28 09:03:12",
"Total Time": 2.22
}
]
}{
"SensorTimes": [
{
"Start Time": "2019-03-28 09:03:38",
"End Time": "2019-03-28 09:03:41",
"Total Time": 3.02
}
]
}
预期输出:
{
"SensorTimes": [
{
"Start Time": "2019-03-28 09:03:10",
"End Time": "2019-03-28 09:03:12",
"Total Time": 2.22
},
{
"Start Time": "2019-03-28 09:03:38",
"End Time": "2019-03-28 09:03:41",
"Total Time": 3.02
}
]
}
对此有任何帮助。
答案 0 :(得分:0)
您实际上是使用append标签("a"
)打开文件,因此它将使用json.dump()
时您写入文件的内容追加到文件中
为防止这种情况,请首先使用open('SensorTimes.json', 'r').read()
读取文件以获取其内容。然后将其转换为json。然后将这个新内容附加到此json。然后使用open('SensorTimes.json', 'w').write(newJson)
或json.dump(newJson, open('SensorTimes.json', 'w'))
您还可以直接打开文件以使用"r+"
标签对其进行读写
答案 1 :(得分:0)
尝试了许多不同的组合后,我开始工作了!
我将JSON追加到一个单独的函数中,该函数在if
语句中被调用,然后返回到原始函数。
datalog = {}
datalog['SensorTimes'] = []
def json_update(dt1, t1, dt0, t0):
with open(r'SensorTimes.json', 'w') as outfile:
datalog['SensorTimes'].append({
"Start Time":dt0,
"End Time":dt1,
"Total Time":round(t1-t0, 2)
})
json.dump(datalog, outfile, indent=4)
return
这给出了预期的输出,并且将在不定函数内一直工作。这会将新字典添加到JSON,并且不会覆盖JSON的现有字典/内容。