JQ JSON处理器的绑定。

pyjq的Python项目详细描述


CircleCI

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.

http://stedolan.github.io/jq/

您可以无缝地调用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接受可选参数varsvarsscript的预定义变量。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

firstall几乎是一些,但它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

  • 第一次释放。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
Android Java在活动之间传递值   java当实体中存在关系时,我可以只使用实体的id而不是从DB中获取实体吗?   bouncycastle Java运行SSHD服务器错误未找到类定义   java SWT/Swing>Threads n'Hell   java多线程数据库读取   java如何在Eclipse中轻松提交Git   java在哪里可以找到字符串相等比较的一组特定排序规则?   无连接表的java单向单域关系   java扩展三角文件   java spring。杰克逊。序列化。failonemptybeans   java无法加载请求的类:oracle。jdbc。驾驶员OracleDriver   java通过数组进行索引循环并打印出元素?   找不到eclipse错误类中的java提交Hadoop作业   Java:随机设定种子   java片段、异步任务和侦听器   java在分号后使用{}