2017-07-04 52 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); 
相關問題