将具有不同键的jq对象组合成一个对象而不发出声音

2024-03-29 10:53:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我有

{"a":1} {"b":2}

我想用jq来获得

^{pr2}$

jq --slurp add myfile效果很好。但是,我想将它与jq.py一起使用,它没有slurp模式。jq是否有办法在不使用--slurp的情况下对任意对象序列(具有不同的键)执行此操作?在


Tags: 对象pyadd模式情况序列myfilejq
3条回答

如果您正在使用python读取myfile,^{}模块described here可能是您想要的。下面是一个测试示例(测试.py)它使用jq.py。在

import splitstream
from jq import jq

def slurp(filename):
    with open(filename) as f:
        for s in splitstream.splitfile(f, format="json"):
            yield s

obj = {}
for jstr in slurp('myfile'):
    obj = jq("[%s, .] | add" % obj).transform(text=jstr, text_output=True)

print obj

这是一个运行示例

^{pr2}$

尽管这似乎满足了您要求使用jq.py的要求,但我认为这不是一个好的解决方案,因为在python和jq之间共享状态既笨拙又低效。在

一个更好的方法可能是使用jq作为子流程。下面是一个示例(test2.py):

import json
import sh

cmd = sh.jq('-M', '-s', 'add', 'myfile')
obj = json.loads( cmd.stdout )
print json.dumps(obj, indent=2)

样本运行:

$ python test2.py
{
  "a": 1, 
  "b": 2
}

这将产生所需的输出。在

jq -nc '[inputs] | add'

我不能说它是否能和jq.py公司然而。在

与使用[输入]相比,对内存的要求更低的是:

reduce inputs as $in ({}; . + $in)

上面假设-n命令行选项有效。如果这在py.jq公司,则应改用以下过滤器:

^{pr2}$

p.s。 也许是作者py.jq公司如果知道的话,愿意解决与命令行选项有关的问题吗?在

相关问题 更多 >