python - 在 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')]")
谢谢您的帮助。
解决方案
在 jsonpath 中,我们可以为“和”条件应用过滤器。
没有这样的“或”条件规定。
这是我在尝试了很多方法来实现它之后得出的结论。
推荐阅读
- c# - 继承从 .NET Framework 到 .NET Standard 实现 IValidatableObject 的类
- python - 根据值计数列删除已排序的行
- php - TABLE 的 SQL 视图和条件记录 COUNT
- rust - 用逗号分隔 Vec 中的元素
- javascript - document.create 没有加载脚本,没有请求 JS 文件
- permissions - Colab:谷歌驱动文件流访问权限很麻烦。有没有更好的办法?
- c - qemu:未捕获的目标信号 11(分段错误) - 尝试返回结构时核心转储
- postgresql - 如何循环json数据并计算postgres中的值
- python - 使用多项式回归时如何解释从“LinearRegression().coef_”返回的系数
- python - 如何在单个 vhost 上服务 django 和 gatsby?