我正在学习ObjectPath for python并且已经找到了,例如,如何对属性进行完全匹配:
>>> import objectpath
>>>
>>> tree = objectpath.Tree({'doc': {'title': 'Purple is Best Color'}})
>>>
>>> tree.execute('$..*[@.title is "Purple is Best Color"]').next()
{'title': 'Purple is Best Color'}
这对我有意义;我想从根($
)开始,递归地(..
)找到所有(*
)项目(@
),其标题为=="紫色是最好的颜色"。它有效!
然后我尝试使用in
运算符进行类似的操作:
>>> tree.execute('$..*["Purple" in @.title]').next()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration
咦?看起来像是调整条件的自然方式,但它并不完全正确。
在手册中,我读到in
检查表达式左侧的结果是否在数组,对象或字符串中,以及对象中的,键是匹配。(也许这就是我的问题,但不确定这意味着什么)。我认为我现在的@
确实是一个字符串......?
考虑到上述情况,我可以在这里找到什么?
答案 0 :(得分:7)
有趣的是,明确地将Purple
转换为字符串有效:
$..*[str("Purple") in @.title]
在ObjectPath
问题跟踪器上创建了一个问题:
答案 1 :(得分:4)
是个错误。它现在已经解决了。该修复程序可通过github(git clone https://github.com/adriank/ObjectPath.git)获得。