Python-将列表字典转储到json中
当我运行此代码时,您好:Python-将列表字典转储到json中,python,json,python-3.x,dump,serializable,Python,Json,Python 3.x,Dump,Serializable,当我运行此代码时,您好: city_dict_humidity = dict() city_dict_temperature = dict() def on_message(client, userdata, msg): if (msg.payload == 'Q'): client.disconnect() topics = msg.topic.split('/') if topics[2] == 'humidity': if topics[1] in city_d
city_dict_humidity = dict()
city_dict_temperature = dict()
def on_message(client, userdata, msg):
if (msg.payload == 'Q'):
client.disconnect()
topics = msg.topic.split('/')
if topics[2] == 'humidity':
if topics[1] in city_dict_humidity:
city_dict_humidity[topics[1]].append(msg.payload)
else:
city_dict_humidity[topics[1]] = [msg.payload]
elif topics[2] == 'temperature':
if topics[1] in city_dict_temperature:
city_dict_temperature[topics[1]].append(msg.payload)
else:
city_dict_temperature[topics[1]] = [msg.payload]
vypis()
uloz_json()
def uloz_json():
with open('data.json','w') as wrt:
json.dump(city_dict_humidity,wrt)
我收到一个错误:TyperError:bytes类型的对象不可JSON序列化。
请问鱼在哪里?这里不能有列表吗?这意味着您正在向dict中添加类型为bytes的内容(b‘像这样’)。这取决于原始
msg
变量的来源以及vypis()
的作用。调试代码的最佳方法是使用interact:import code
然后在uloz_json
函数中添加code.interact(local=locals())
。在shell中运行代码,它将在uloz_json
函数中停止。在shell中写入city\u dict\u湿度
,并检查字节类型的值(以b开头)。问题在于数据。你可以有列表。如果您阅读错误消息,您会发现它在抱怨字节数
。字节是未编码的字符序列。它们几乎是一根绳子,但不完全是。您需要对字节做出选择—要么将它们转换为字符串,要么将它们转换为整数列表。要转换为纯字符串,您需要执行msg.payload.decode()
,或者要获取(每个字节值的)整数列表,您需要执行list(msg.payload)
谢谢,Tadhg McDonald Jensen这就是我需要的,没有意识到它不是作为纯字符串/int发送的…我太专注于dict东西中的列表了