2017-07-04 269 views
0

我是jq的新手,仍在尝试学习JSON的基础知识,所以请原谅我缺乏知识。 我发现这个工具非常快,但我正在努力获得我需要的结果。我相信这是可能的,因为我已经意外:( 使得它一旦我有输入数据,如jq将数组拆分为两个数组

[ 
    {"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),但是这导致了一个错误 - 不知道如何使用它,并且这些例子迄今为止并不适用于我。

回答

1

以下过滤器恰好产生的输出作为描述:

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

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

+0

无论我怎么努力,我始终以“不能用字符串索引号” 我试图 'JQ -r”结束[]。|选择(长度> 0)|地图(select(.time))'' 但这总是会产生相同的错误。由于长度部分,它应该跳过空记录,但它仍然不起作用:( –

+0

也许你打算写:'地图(选择(长度> 0)|选择(。时间))'?或者也许:'。 [] | select(length> 0 and .time)'? – peak

+0

所以我试过了: 'jq -C'。[] | select(length> 0 and .time)| map(.time)'' and ' jq -C'。[] | select(length> 0)| map(select(.time))'' 并且两者都以'无法用字符串索引数字'结尾' –

-2

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

var timeData=[]; 
var currentData=[]; 
var mergedJsonData={}; 

var yourJsonDataLenght= JSON.yourJsonData.length; 

for (infoIndex = 0; infoIndex < yourJsonDataLenght; infoIndex++) { 

    timeData.push(JSON.yourJsonData.time[infoIndex]); 
    currentData.push(JSON.yourJsonData.time[infoIndex].power.current); 
} 

mergedJsonData.push(timeData); 
mergedJsonData.push(currentData);