我试图从我的python脚本执行jq命令。目前,当我从终端(MacOS)执行时,jq命令工作正常。
cat filename.json |jq '{Name:.name, address:.address[0][1].street}'
字符串
基本上,我试图使用jq从JSON中提取数据。由于JSON包含嵌套数组,我必须使用变量循环。
我的问题是-
- 我可以从python脚本执行此命令吗
- 如果可以的话,那么我如何循环遍历嵌套数组呢
- 样本数据中的元素给予上述(地址[][].street)
我不想使用Python以外的任何语言,因为这会导致兼容性问题。
7条答案
按热度按时间vs3odd8k1#
从jq FAQ:
问:Python有哪些绑定可用?
答:
pip install jq #详情请参阅https://pypi.python.org/pypi/jq
pip install pyjq #详情请参阅https://pypi.python.org/pypi/pyjq
至于嵌套数组,循环遍历它听起来像是可以(也许应该)在jq中完成的事情。
2exbekwf2#
我相信公认的答案应该是peak的答案,因为在python中使用C API的正确方法是通过python绑定库,https://pypi.python.org/pypi/jq和https://pypi.python.org/pypi/pyjq都应该按预期工作。
话虽如此,既然我们谈论的是Python,我想带来一个更Python的替代方案:glom(
pip install glom
,https://glom.readthedocs.io/)与
jq
中使用的DSL不同,glom
只需使用纯python以所需格式声明输出(此输出格式称为spec
)。在本例中,您需要一个简单的dict
:字符串
然后在你的数据上调用glom:
型
就像
jq
一样,你也可以在命令行中使用glom
:型
一个完整的python例子:
型
j91ykkif3#
好吧,我是jq的忠实粉丝,但看起来你也在做一些在Python中无法轻松完成的事情。考虑一下:
字符串
wmomyfyw4#
sh
模块可以很容易地从python调用jq子进程。字符串
z4iuyo4d5#
1.我可以从python脚本执行此命令吗
是,使用子流程。示例:
字符串
1.如果可以做到这一点,那么我将如何循环通过嵌套数组元素的样本数据给予以上(地址[][].street)
这将有助于看到一个JSON数据集与一些记录。为了在Python中使用jq循环JSON集,很容易获得对象的计数,然后重新计数。稍微有点开销,但它使代码易于理解。
型
好好享受吧!
nwnhqdif6#
是的。使用plumbum。
字符串
上面命令的结果是一个JSON对象,可以使用
json.loads
解析为Python对象。您可能还对jello感兴趣,它类似于
jq
,但使用Python作为查询语言。uqdfh47h7#
**有一个名为JQpy的JQ Python绑定。**这个绑定不需要用户编译任何东西,因此只适用于Linux。
安装程序
Linux:
字符串
窗口:
型
示例
型
原问题
型