Python网络监测脚本调用json.loads()触发TypeError报错求助
错误原因
你混淆了json模块两个核心接口的用途:
json.loads()用于将JSON格式的字符串/字节数据转换为Python字典、列表等原生对象,要求输入必须为字符串、字节或字节数组类型,你传入Python字典对象自然触发类型错误json.dump()本身就支持直接接收Python原生对象,自动转换为JSON格式写入文件,不需要提前做任何转换操作
修复方法
直接删除else分支里的obj = json.loads(data)这行冗余代码,将data变量直接传给json.dump()即可。
另外要注意:你当前使用追加模式(a)写入JSON文件,多次触发写操作后,文件内会存在多个独立的JSON对象,没有外层数组包裹,后续读取整个文件时会报格式错误。如果需要长期存储可正常解析的记录,推荐两种优化方案:
- 方案1:使用JSON Lines格式存储,去掉
indent格式化参数,每次写完追加一个换行符,后续读取时逐行解析即可 - 方案2:每次写入前先读取现有文件内的JSON数组,将新记录追加到数组后再整体覆写回文件
修复后核心代码片段
else: print(web_ip_address, 'is unreachable!') with open('Downtime_Data.json', 'a', encoding='utf-8') as json_file: # 采用JSON Lines格式存储,后续可逐行解析不报错 json.dump(data, json_file, sort_keys=True) json_file.write('\n') # 如果需要保留缩进格式化,建议改为数组存储方案避免整体格式错误
内容的提问来源于stack exchange,提问作者Destro
相关产品推荐
相关产品推荐

