JQ JSON处理器的绑定。
pyjq的Python项目详细描述
pyjq是jq(http://stedolan.github.io/jq/)的python绑定。
jq is like sed for JSON data – you can use it to slice and filter and map and transform structured data with the same ease that sed, awk, grep and friends let you play with text.
您可以无缝地调用jq脚本(如正则表达式)并处理 简单的python数据结构。
对于您的信息,https://pypi.python.org/pypi/jq也是一个jq 绑定,但与pyjq不同且不兼容。
示例
>>> data = dict( ... parameters= [ ... dict(name="PKG_TAG_NAME", value="trunk"), ... dict(name="GIT_COMMIT", value="master"), ... dict(name="TRIGGERED_JOB", value="trunk-buildall") ... ], ... id="2013-12-27_00-09-37", ... changeSet=dict(items=[], kind="git"), ... ) >>> import pyjq >>> pyjq.first('.parameters[] | {"param_name": .name, "param_type":.type}', data) {'param_type': None, 'param_name': 'PKG_TAG_NAME'}
安装
它需要构建工具,如make、automake、libtool等。
您可以通过通常的方式从pypi安装。
pip install pyjq
API
对于jq脚本,see its manual。
仅提供四个API:
- all
- first
- one
- compile
all通过json脚本转换值,并将所有结果作为 列表。
>>> value = {"user":"stedolan","titles":["JQ Primer", "More JQ"]} >>> pyjq.all('{user, title: .titles[]}', value) [{'user': 'stedolan', 'title': 'JQ Primer'}, {'user': 'stedolan', 'title': 'More JQ'}]
all接受可选参数vars。vars是 script的预定义变量。vars中的值可用 在script中作为$key。也就是说,vars的工作方式类似于--arg 选项和jq命令的--argjson选项。
>>> pyjq.all('{user, title: .titles[]} | select(.title == $title)', value, vars={"title": "More JQ"}) [{'user': 'stedolan', 'title': 'More JQ'}]
all接受可选参数url。如果给定url,则 转换的主题来自url。
>> pyjq.all(".[] | .login", url="https://api.github.com/repos/stedolan/jq/contributors") # get all contributors of jq ['nicowilliams', 'stedolan', 'dtolnay', ...
另外,all接受一个可选参数opener。违约 opener只需通过^{tt23}下载内容$ 并通过json.decode解码。但是,您可以自定义此行为 使用自定义opener。
first对all几乎是一些,但它first返回第一个 转变的结果。
>>> value = {"user":"stedolan","titles":["JQ Primer", "More JQ"]} >>> pyjq.all('{user, title: .titles[]}', value) [{'user': 'stedolan', 'title': 'JQ Primer'}, {'user': 'stedolan', 'title': 'More JQ'}]
first在没有结果时返回default。
>>> value = {"user":"stedolan","titles":["JQ Primer", "More JQ"]} >>> pyjq.first('.titles[] | select(test("e"))', value) # The first title which is contains "e" 'JQ Primer'
first返回转换的第一个结果。它又回来了 default如果没有结果。
>>> value = {"user":"stedolan","titles":["JQ Primer", "More JQ"]} >>> pyjq.first('.titles[] | select(test("T"))', value, "Third JS") # The first title which is contains "T" 'Third JS'
onedo还返回转换的第一个结果,但引发 如果没有结果,则出现异常。
>>> value = {"user":"stedolan","titles":["JQ Primer", "More JQ"]} >>> pyjq.one('.titles[] | select(test("T"))', value) IndexError: Result of jq is empty
限制
JQ是一个JSON处理器。因此pyjq只能处理“json 兼容“数据(对象仅由str、int、float、list、dict生成)。
问答
如何处理pyjq从api获取的json字符串?
在传递到之前,您应该在标准库中应用json.loads。 皮吉。
许可证
在麻省理工学院的许可下发布。有关详细信息,请参见许可证。
开发
我们承诺_pyjq.c
编辑_pyjq.pyx时,需要在之前运行cython _pyjq.pyx。 运行python setup.py develop。这是因为setup.py在这个 项目不编译.pyx到.c。
当然,我们可以在setup.py中使用Cython.Build.cythonize来 自动编译.pyx到.c。但是,它在 pip install。
所以,我们同时提交_pyjq.pyx和_pyjq.c。
更改
2.3.0
- 支持在MSYS中安装。
2.2.0
- 向函数添加了library_paths参数。
2.1.0
- api的translate js对象不是dict,而是 collections.OrderedDict。
2.0.0
- 语义版本控制。
- 捆绑JQ和Oniguruma的源代码。
- 支持Python3.5。
- 放弃了对Python3.2的支持。
- AEDED^{TT1}$方法。
1.0
- 第一次释放。