Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python-将列表字典转储到json中_Python_Json_Python 3.x_Dump_Serializable - Fatal编程技术网

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东西中的列表了