【问题标题】:Using JQ in python like using it through cli在 python 中使用 JQ 就像通过 cli 使用它一样
【发布时间】:2020-11-30 13:50:28
【问题描述】:

我有一些通过 api 运行的 cli 命令,然后像这样传递给 jq

cat json.txt | jq '.members[] | [.name] 

但现在我正在尝试在 python 中执行一些逻辑,然后将其通过管道输出到 jq,但即使以与上述类似的方式,我也无法弄清楚如何做到这一点。

我阅读了 python 中 jq 模块的文档,但我无法让它工作,有人可以帮我解决这个问题吗?

【问题讨论】:

  • 为什么你的 Python 脚本必须知道这一点?要么自己通过管道将输出传递给 JQ (python3 whatever.py | jq '...'),要么只在 Python 脚本中编写使用 JQ 应用的逻辑。
  • 你知道我什至没有想过这样做,好主意。但如果可能的话,我也想学习如何在 python 中做到这一点?
  • 有可能,你可以使用例如subprocess。已经有quite a few 的帖子。
  • jq 至少有两个 python 包装器。请说明您尝试过哪些以及您尝试过的内容。
  • @peak 我已经尝试了 pyjq 模块并尝试了这个,但它只是不断出错 pyjq.all('.members[] | {"name": .name}' 然后我也尝试了 jmespath并做了以下但没有返回 jmespath.search("members[*]", data)

标签: python jq


【解决方案1】:

之后:pip3 install pyjq

以下运行没有问题:

import pyjq
print(pyjq.all( ".members[] | [.name]", {"members": [ {"name": "foo"} ]} ))

输出:

[['foo']]

文档

pyjq 的文档位于https://pypi.org/project/pyjq/

特别注意url 可选参数。

【讨论】:

【解决方案2】:

使用subprocess 模块:

import subprocess

cmd=["cat", "json.txt", "|", "jq", "'.members[]", "|", "[.name]"]
result = subprocess.check_output(cmd, shell=True)

print(result)

【讨论】:

  • 感谢您的回复,我对其进行了测试,它工作正常,但我想在 python 中执行该过程,就像使用 jq 模块一样,如果有人有使用该模块的经验。
猜你喜欢
  • 1970-01-01
  • 2021-06-27
  • 2021-12-03
  • 1970-01-01
  • 2014-11-09
  • 2018-07-11
  • 2011-02-27
  • 1970-01-01
  • 2022-11-16
相关资源
最近更新 更多