2017-07-04 11 views
0

私はjqの新機能ですが、まだJSONの基礎を学んでいます。 私はツールを驚くほど早く見つけましたが、私は必要な結果を得るのに苦労しています。私は私が使用したものjqを2つの配列に分割する

[ 
    1499150456, 
    1499150516, 
    1499150576 
    ] 
    [ 
    76.00, 
    16.20, 
    25.30 
    ] 

のようなものにそれを抽出したいな

[ 
    {"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}}}, 
    {} 
] 

ように私は、私は私が入力されたデータを持っている事故:( 一度それを作ったとして、それが可能だと確信していますここまででした:。

最後の空のレコードなしの素敵な初期配列を出力
cat inputFile.json | jq -C '.[] | select (length > 0)' 

次に、私は

を行うことができますよ
cat inputFile.json | jq -C '.[] | select (length > 0) | .time, .data.power.current' 

結果は非常に近いですが、私が必要とするものではありません。 私はいくつかの例で見つかったマップ(.time)を使用したかったが、エラーが発生しました。使用方法がわからず、これまでの例ではうまくいきませんでした。

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

これは、マップとして解析される(...)|:

答えて

1

は、次のフィルタを説明するように、正確に出力を生成します(map(...)、map(...))、結果として2つのJSON配列からなるストリームが生成されます。

+0

どんなに私がしようとするもの、私はいつも私が 'JQ -r」を試してみました「の文字列を持つことができないインデックス番号」 で終わるん[]。|選択(長さ> 0)| map(select(.time)) '' でも、常に同じエラーが発生します。長さ部分のおかげで、空のレコードをスキップする必要がありますが、それでもうまくいきません:( –

+0

'map(select(length> 0)| select(.time)) '? [] | select(length> 0 and .time) '? – peak

+0

だから私は試しました: ' jq -C '[] | select(length> 0 and .time)| map(.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); 
関連する問題