我有两个相同的json文件 - test.json
和test2.json
,格式如下。我的目标是将它们组合起来并保持完全相同的格式 - 基本上只将一个堆叠在另一个上面而不创建两个列表。
我是bash和jq的新手但是这段代码会抛出一个错误:
jq -s '.[0] * .[1]' test.json test2.json
jq: error (at test2.json:17): array ([{"vendor":...) and array ([{"vendor":...) cannot be multiplied
为什么会发生这种情况,如何在不编写额外括号[]
的情况下保留格式。如何在整个文件中组合并保留一对括号?见下文:
test.json
:
[
{
"vendor": 0,
"startTime": 4380,
"endTime": 4445
},
{
"vendor": 0,
"startTime": 4448,
"endTime": 4453
},
{
"vendor": 0,
"startTime": 4696,
"endTime": 4880
}
]
不受欢迎的输出:
[
[
{"vendor":0,"startTime":4380,"endTime":4445},
{"vendor":0,"startTime":4448,"endTime":4453},
{"vendor":0,"startTime":4696,"endTime":4880}],
[{"vendor":0,"startTime":4380,"endTime":4445},
{"vendor":0,"startTime":4448,"endTime":4453},
{"vendor":0,"startTime":4696,"endTime":4880}
]
]
期望的输出:
[
{"vendor":0,"startTime":4380,"endTime":4445},
{"vendor":0,"startTime":4448,"endTime":4453},
{"vendor":0,"startTime":4696,"endTime":4880},
{"vendor":0,"startTime":4380,"endTime":4445},
{"vendor":0,"startTime":4448,"endTime":4453},
{"vendor":0,"startTime":4696,"endTime":4880}
]
答案 0 :(得分:2)
以下调用会产生所需的结果:
jq -s add input.json input.json
简而言之,-s(“slurp”)选项将所有顶级输入JSON实体放入一个数组中,在本例中生成一个数组数组。 add
然后“添加”此数组的组件 - 多态的add
具有连接组件数组的效果。
如果您的jq有inputs
,您可以同样写:
jq -n '[inputs]|add' input.json input.json
or:
jq -n '[inputs[]]' input.json input.json
顺便说一句,还有其他方法可以将文件中的JSON传递给jq。
答案 1 :(得分:-2)
我有naver使用jq
命令
但你可以使用python脚本轻松完成这个任务:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Author:
# Maintainer:
import simplejson as json
def test():
with open("test.json") as fp:
js1 = json.loads(fp.read())
with open("test2.json") as fp1:
js2 = json.loads(fp1.read())
js = js1 + js2
print(json.dumps(js, indent=4))
if __name__ == "__main__":
test()
# vim:ai:et:sts=4:sw=4:
请注意,您可能要做的唯一事情是使用
安装simplejson
包
sudo pip install simplejson
因为它可能没有附带您的发行版,祝您好运