树莓派Python开发读取JSON文件报JSONDecodeError如何解决?
问题根因
你的JSON文件存在语法错误,不符合JSON标准规范:
main对象的最后一个属性"day": 0末尾多了多余的尾随逗号,JSON语法明确禁止对象/数组的最后一项后保留逗号。
你遇到的报错Expecting property name enclosed in double quotes: line 14 column 9就是解析器读到这个多余逗号后,误以为后续还会有新的属性定义,所以抛出了期望属性名的错误。
修复方法
删除JSON文件里"day": 0后面的逗号即可,修正后的JSON内容如下:
{ "main": { "active": true, "watering": false, "fwatering": false, "ffminwatering": false, "humidity": 24, "temp": 17.6, "battery": 100, "logging": true, "last_watering": "27.08.2021 16:15:39", "l_day": 0, "day": 0 } }
额外优化建议
你现有的Python代码只捕获了文件不存在的异常,没有处理JSON解析失败的场景,如果JSON解析出错,jsondata变量不会被定义,后续调用jsondata['main']['logging']会触发NameError。可以调整代码结构,把JSON读取和解析相关的逻辑都放进try块,同时新增JSON解析异常的捕获:
import logging import json jsondata = None try: with open('/var/www/BWSWebApp/apictx.json') as file: jsondata = json.load(file) _logging = jsondata['main']['logging'] if _logging == True: _logging = '/home/pi/Desktop/BewaesserungssystemV3/data/info_log.log' else: _logging = None except FileNotFoundError: print('Error: File not found (ln 35)') except json.decoder.JSONDecodeError: print('Error: JSON file format invalid') except KeyError: print('Error: Missing required field in JSON')
内容的提问来源于stack exchange,提问作者Jannis
相关产品推荐
相关产品推荐

