我有一些用 YAML 创建的对象结构。在 YAML 内部使用了许多标签。因此,该文档不仅包含内置类型,还包含一些从注册构造函数创建的对象。我需要通过一些模式来检查它们。
到目前为止,我已经尝试过jsonpath
、和。所有这些库都很棒,我喜欢查询语言(尤其是前两种),但它们严格期望作为输入。是否有一些原始对象的类似物?objectpath
jmespath
dpath
JSON
我有一些用 YAML 创建的对象结构。在 YAML 内部使用了许多标签。因此,该文档不仅包含内置类型,还包含一些从注册构造函数创建的对象。我需要通过一些模式来检查它们。
到目前为止,我已经尝试过jsonpath
、和。所有这些库都很棒,我喜欢查询语言(尤其是前两种),但它们严格期望作为输入。是否有一些原始对象的类似物?objectpath
jmespath
dpath
JSON
glom处理这个:
>>> from glom import glom
>>> from types import SimpleNamespace
>>> sn1 = SimpleNamespace()
>>> sn1.foo = SimpleNamespace()
>>> sn1.foo.bar = "baz"
>>> glom(sn1, "foo.bar")
'baz'
从我记得写 ObjectPath 的内容来看,有一些技术上的细微差别使得查询 Python 对象变得几乎不可能。有内置的对象和用 C 编写的不公开对象属性的类,还有隐藏其他类的私有属性等。
ObjectPath 应该适用于从 Dict 继承的类,但代码是实验性的。它可能对您来说开箱即用,如果不是,那么执行此操作的代码位于最新的 ObjectPath @ https://github.com/adriank/ObjectPath/blob/master/objectpath/core/interpreter.py#L47中。