jq将数组拆分为两个数组

时间:2017-07-04 06:53:20

标签: arrays select jq

我是jq的新手,并且仍在尝试学习JSON的基础知识,所以请原谅我缺乏知识。 我发现这个工具非常快,但我很难得到我需要的结果。我确信这是可能的,因为我偶然做了一次:( 我有输入数据,例如

[
  {"time":1499150456,"data":{"power":{"bus":3.88,"shunt":6.98,"load":3.89,"current":76.00},"light":{"light":21}}},
  {"time":1499150516,"data":{"power":{"bus":3.93,"shunt":1.67,"load":3.93,"current":16.20},"light":{"light":21}}},
  {"time":1499150576,"data":{"power":{"bus":3.92,"shunt":5.58,"load":3.93,"current":25.30},"light":{"light":21}}},
  {}
]

我想将其提取为类似

的内容
  [
   1499150456,
   1499150516,
   1499150576
  ]
  [
   76.00,
   16.20,
   25.30
  ]

到目前为止我使用的是:

cat inputFile.json | jq -C '.[] | select (length > 0)'

输出没有最后一个空记录的漂亮的初始数组。 接下来,我能够做到

cat inputFile.json | jq -C '.[] | select (length > 0) | .time, .data.power.current'

结果非常接近,但不完全是我需要的。 我想使用我在某些示例中找到的map(.time),但这导致了错误 - 不确定如何使用它,并且示例到目前为止对我来说都不起作用。

2 个答案:

答案 0 :(得分:1)

以下过滤器完全按照描述生成输出:

map(select(.time))
| map(.time), map(.data.power.current)

这被解析为map(...)| (map(...),map(...)),从而产生一个由两个JSON数组组成的流。

答案 1 :(得分:-2)

首先,您可以创建一个新的json对象。在创建操作之前,您应该像这样收集新数组中的数据;

Geocoder