jq JSON处理器绑定。
项目描述
pyjq: jq JSON处理器绑定
pyjq是jq(《http://stedolan.github.io/jq/》)的Python绑定。
jq类似于用于JSON数据的sed - 您可以使用它以与sed、awk、grep等处理文本相同的方式轻松切片、筛选、映射和转换结构化数据。
您可以无缝调用jq脚本(如正则表达式)并处理原始Python数据结构。
请注意,https://pypi.python.org/pypi/jq是另一个与pyjq不同且不兼容的jq绑定。
示例
>>> 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_name': 'PKG_TAG_NAME', 'param_type': None}
安装
您需要flex、bison(3.0或更高版本)、libtool、make、automake和autoconf来构建jq。您可以通过Homebrew、APT或其他方式安装它们。
您可以通过常规方式从PyPI安装。
pip install pyjq
API
有关jq脚本,请参阅其《手册》。
仅提供四个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
的作用类似于jq命令的--arg
选项和--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
会使用 urllib.request.urlopen
下载内容,并使用 json.decode
解码。然而,您可以使用自定义的 opener
来自定义此行为。
first
和 one
函数与 all
类似。
first
函数返回转换的第一个结果。如果没有结果,first
函数返回 None
或指定的 default
值。
>>> data = {"user":"stedolan","titles":["JQ Primer", "More JQ"]}
>>> pyjq.first('{user, title: .titles[]}', data)
{'user': 'stedolan', 'title': 'JQ Primer'}
>>> pyjq.first('.titles[] | select(test("T"))', data) # returns None
>>> pyjq.first('.titles[] | select(test("T"))', data, default="Third JS")
'Third JS'
one
函数返回转换的唯一结果。如果没有结果或者有两个或更多结果时,它将抛出一个异常。
>>> data = {"user":"stedolan","titles": ["JQ Primer", "More JQ"]}
>>> pyjq.one('.titles[] | select(test("P"))', data)
'JQ Primer'
>>> pyjq.one('.titles[] | select(test("T"))', data)
Traceback (most recent call last):
IndexError: Result of jq is empty
>>> pyjq.one('.titles[] | select(test("J"))', data)
Traceback (most recent call last):
IndexError: Result of jq have multiple elements
compile
函数类似于 re.compile
。它接受 jq 脚本并返回一个包含方法的对象。
>>> data = {"user":"stedolan","titles":["JQ Primer", "More JQ"]}
>>> import pyjq
>>> pat = pyjq.compile('{user, title: .titles[]}')
>>> pat.all(data)
[{'user': 'stedolan', 'title': 'JQ Primer'}, {'user': 'stedolan', 'title': 'More JQ'}]
限制
jq 是一个 JSON 处理器。因此,pyjq 只能处理“JSON 兼容”的数据(仅由 str、int、float、list、dict 组成的对象)。
问答
如何使用 pyjq 处理 JSON 字符串(例如从 API 获取的)?
在将字符串传递给 pyjq 之前,您应该使用标准库中的 json.loads
调用该字符串。
作者
许可证
MIT 许可证。请参阅 LICENSE。
此包包含 jq 和 oniguruma。它们的许可文件包含在其各自的存档文件中。
- jq:
dependencies/jq-1.5.tar.gz
- oniguruma:
dependencies/onig-6.9.0.tar.gz
变更日志
2.6.0
- 支持 3.10
2.5.1
- 修复了拼写错误。
2.5.0
- 只支持 3.7+。
- 添加了 pyjq.ScriptRuntimeError。
2.4.0
- 停止支持 Python 2.7、3.4、3.5(只支持 3.6+)。
2.3.0
- 支持 WindowsPE(msys)
2.2.0
- 添加了
library_paths=
选项。
2.1.0
- API 的 translate JS 对象不再转换为
dict
,而是转换为collections.OrderedDict
。
2.0.0
- 语义版本控制。
- 打包 jq 和 oniguruma 的源代码。
- 支持 Python 3.5。
- 停止支持 Python 3.2。
- 添加了
all
方法。
1.0
- 第一个版本。
项目详情
pyjq-2.6.0.tar.gz 的散列值
算法 | 散列摘要 | |
---|---|---|
SHA256 | e083f326f4af8b07b8ca6424d1f99afbdd7db9b727284da5f919b9816077f2e4 |
|
MD5 | ecd20a9ee2eee10b032947868063c0d8 |
|
BLAKE2b-256 | 8ea7678a3f5d458c9c1002adf4938a5df830448254423095ce68d2171abf5b21 |
哈希值 用于 pyjq-2.6.0-cp310-cp310-macosx_12_0_x86_64.whl
算法 | 散列摘要 | |
---|---|---|
SHA256 | 6e0e4f398e81b1fb9794874d81fc9240d4a155adba5a1aecda77e717bcfae03e |
|
MD5 | 7c5cd42e5f883b7380662fc27bfbf0dc |
|
BLAKE2b-256 | 1212b1016128aed3ee6419b6aaa681e6a795747042a4b5eb24fc28bbe872484c |