首页 > 解决方案 > 在 jsonpath-ng python 中使用 OR 运算符 (|)

问题描述

我有一个 json 结构(client_json),看起来像:

client_json = { "data": [ { "attributes": { "creators": [ { "name": "This is a person", "nameType": "Personal", "givenName": "the", "familyName": "person" }, { "name": "This is an organization", "nameType": "Organizational", "givenName": "the", "familyName": "organization" } ] } } ] }

我正在尝试使用 jsonpath-ng 1.4.3 ( https://github.com/h2non/jsonpath-ng ) 来检索创建者姓名。

from jsonpath_ng import jsonpath
from jsonpath_ng.ext import parse

这两个表达式给出了预期的结果:

[match.value['name'] for match in parse("data[*].attributes.creators[?(@.nameType='Personal')]").find(client_json)]
[match.value['name'] for match in parse("data[*].attributes.creators[?(@.nameType='Organizational')]").find(client_json)]

我试图将它们与 or 运算符结合起来,所有这些表达式都会产生解析错误:

parse("data[*].attributes.creators[?(@.nameType == 'Organizational' | @.nameType == 'Personal')]")
parse("data[*].attributes.creators[?(@.nameType == 'Organizational' || @.nameType == 'Personal')]")
parse("data[*].attributes.creators[?(@.nameType == 'Organizational'), ?(@.nameType == 'Personal')]")
parse("data[*].attributes.creators[?(@.nameType == 'Organizational') || ?(@.nameType == 'Personal')]")
parse("data[*].attributes.creators[?(@.nameType == 'Organizational') | ?(@.nameType == 'Personal')]")
parse("data[*].attributes.creators[?(@.nameType = 'Organizational' | @.nameType = 'Personal')]")

谢谢您的帮助。

标签: pythonjsonoperatorsjsonpath

解决方案


在 jsonpath 中,我们可以为“和”条件应用过滤器。

没有这样的“或”条件规定。

这是我在尝试了很多方法来实现它之后得出的结论。


推荐阅读