组合JSON文件而不使用额外的括号

时间:2017-06-22 02:31:09

标签: json bash shell jq

我有两个相同的json文件 - test.jsontest2.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}
  ]

2 个答案:

答案 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

因为它可能没有附带您的发行版,祝您好运