我正在尝试将json MSG解析为python dict。
作为参考,使用python MQTT处理程序从Things Network接收消息。
这是我打印对象时收到的格式
msg = MSG(variable_group=MSG(data0=0, data1=0, data2=0), variable2='name', variable3='num')
在默认状态下,我可以通过msg.variable2访问各个字段,例如提供“name”但不提供变量名称本身。
这适用于我将所有内容硬编码到我的系统中的情况,但我希望它更具适应性并为变量创建新条目。
有没有办法解析这个问题,以便我同时得到数据和变量名?
谢谢!
编辑:
从上面的输入中,我想得到一个包含变量名和数据的python dict。
dict =
{
variable_group : MSG(data0=0, data1=0, data2=0),
variable2 : 'name',
variable3 : 'num'
}
目前,我可以通过for循环访问数据,如果我打印整个结构,可以打印变量名,但不能通过循环机制访问变量名
编辑2:
在对包装器进行一些挖掘之后发现了以下内容:
def _json_object_hook(d):
return namedtuple("MSG", d.keys())(*d.values())
def json2obj(data):
return json.loads(data, object_hook=_json_object_hook)
上面显示的输入是通过将其作为'data'传递给json2obj来创建的。
我仍然不确定如何从这种格式中获取dict,之前没有使用过object_hooks。
答案 0 :(得分:0)
从下面评论中的讨论看来,MSG对象似乎是一个从json对象中快速创建的命名元组。
在这样的情况下,您可以通过查看对象的_fields
来获取字段。你可以这样命名一个像这样的名字小组
def nt_to_dict(nt):
return {field, getattr(nt, field) for field in nt._fields}
或者您可以通过在代码中拖动_fields
并根据需要使用getattr
来检查对象