在Python中使用JQ就像通过cli使用它一样

问题描述 投票:0回答:4

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

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

但是现在我试图在 python 中做一些逻辑,然后将其输出到 jq,但即使以与上面类似的方式我也无法弄清楚如何做到这一点。

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

python jq
4个回答
7
投票

之后:

pip3 install pyjq

以下运行没有问题:

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

输出:

[['foo']]

文档

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

特别注意

url
可选参数。


0
投票
import os

sd = os.system('cat json.txt | jq ".members[] | [.name]"')

print(sd)

0
投票

还有一种名为 JQpy 的替代 JQ Python 绑定。 这个不需要用户编译任何内容,因此只需在 Linux/Windows/e.t.c. 上运行即可。

安装

Linux:

sudo apt-get update && sudo apt-get install jq
pip install jqpy

Windows

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'}]

-1
投票

使用

subprocess
模块:

import subprocess

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

print(result)
© www.soinside.com 2019 - 2024. All rights reserved.