我有一些 cli 命令通过 api 运行,然后像这样传递给 jq
cat json.txt | jq '.members[] | [.name]
但是现在我试图在 python 中做一些逻辑,然后将其输出到 jq,但即使以与上面类似的方式我也无法弄清楚如何做到这一点。
我阅读了 python 中 jq 模块的文档,但我就是无法让它工作,有人可以帮我解决这个问题吗?
之后:
pip3 install pyjq
以下运行没有问题:
import pyjq
print(pyjq.all( ".members[] | [.name]", {"members": [ {"name": "foo"} ]} ))
[['foo']]
pyjq 的文档位于 https://pypi.org/project/pyjq/
特别注意
url
可选参数。
import os
sd = os.system('cat json.txt | jq ".members[] | [.name]"')
print(sd)
还有一种名为 JQpy 的替代 JQ Python 绑定。 这个不需要用户编译任何内容,因此只需在 Linux/Windows/e.t.c. 上运行即可。
Linux:
sudo apt-get update && sudo apt-get install jq
pip install jqpy
choco install jq
pip install jqpy
>>> from jqpy import jq
>>> jq('.results[] | {age, city}', {
"timestamp": 1234567890,
"report": "Age Report",
"results": [
{ "name": "John", "age": 43, "city": "TownA" },
{ "name": "Joe", "age": 10, "city": "TownB" }
]
})
[{'age': 43, 'city': 'TownA'}, {'age': 10, 'city': 'TownB'}]
使用
subprocess
模块:
import subprocess
cmd=["cat", "json.txt", "|", "jq", "'.members[]", "|", "[.name]"]
result = subprocess.check_output(cmd, shell=True)
print(result)