python - 在 Python 中解析 JSON 味精
问题描述
我正在尝试将 json MSG 解析为 python dict。
作为参考,消息是使用 python MQTT 处理程序从物联网接收的。
这是我打印对象时收到的格式
msg = MSG(variable_group=MSG(data0=0, data1=0, data2=0), variable2='name', variable3='num')
在其默认状态下,我可以通过 msg.variable2 访问各个字段,例如提供“名称”但不提供变量名称本身。
这对于我将所有内容硬编码到我的系统中的情况很好,但我希望它更具适应性,并在变量进入时为它们创建新条目。
有什么方法可以解析这个,让我同时获得数据和变量名?
谢谢!
编辑:
从上面的输入,我想得到一个包含变量名和数据的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)
上面显示的输入是通过将其作为“数据”传递给 json2obj 来创建的。
我仍然不确定如何从这种格式中获取字典,之前没有使用过 object_hooks。
解决方案
从下面评论中的讨论来看,MSG 对象似乎是一个从 json 对象动态创建的命名元组。
在这种情况下,您可以通过查看_fields
对象来获取字段。你可以像这样 dict-ify 一个命名元组
def nt_to_dict(nt):
return {field, getattr(nt, field) for field in nt._fields}
或者您可以通过_fields
在代码中拖钓并getattr
根据需要使用来检查对象
推荐阅读
- java - Spring boot 和 Sybase 的 SQL 警告
- python - 在 t2.micro 上运行 python 性能不佳,我相信执行 I/O 操作的时间越来越长
- amazon-web-services - CloudWatch 代理 Windows LogicalDisk 指标 - 选择卷
- jquery - 根据复选框值操作日期选择器天数
- javascript - 什么是链接 Observable 的正确方法
用打字稿(角度)? - javascript - If Else 语句在 .each() 内部不起作用
- c - gcc 不会编译为共享文件夹中的可执行文件
- java - 如何将@BeforeEach 方法与特定的@Test 方法(Java、JUnit)链接起来
- django - Snapchat 的 PKCE 参数
- javascript - 如何知道是空格还是纯文本?