我试图使用jq组合两个数组,但遇到了一些麻烦。
我正试图解析来自netdata (netdata.firehol.org)的数据和我感兴趣的json响应中的两段数据,它们都是数组的一部分。第一个数组是第二个数组中数据点的标签。
样本输入
[
"time",
"guest_nice",
"guest",
"steal",
"softirq",
"irq",
"user",
"system",
"nice",
"iowait"
]
[
1460728600,
0,
0,
0,
0.45731,
0,
0.25108,
11.74702,
48.22465,
0
]输入
如果您想自己获取要测试的新数据,可以使用以下方法:
curl -s -X GET --header 'Accept: application/json'
'http://netdata.firehol.org/api/v1/data?chart=system.cpu&after=-10&before=0&points=1&group=average&format=json&options=seconds%2Cjsonwrap' | jq '.result.labels, .result.data[]'我尝试使用map(),并尝试为两个数组分配vars,然后一起打印对象,但是没有成功(如下所示)。
码
| jq '.result.labels as $labels | .result.data[] as $data | .result.data[] | Label: $labels[.], data: $data[.]}'我很欣赏任何人事先的洞察力,因为我有点卡住了,我更希望能够在jq中完成这一切,而不是在bash中使用for循环(如果可能的话)。
期望输出
{“时间”:"1460728600","guest_nice":"0",.}
发布于 2016-04-15 15:10:40
您还没有具体说明如何组合数组,但有一种方法是使用transpose,在本例中,这实际上是一种zip。例如:
$ jq -n -c '[["a","b"], [1,2]] | transpose'收益率:[["a",1],["b",2]]
如果您想要一个对象数组,那么使用相同的输入,
transpose | map( { (.[0]) : .[1] } )会产生:[{"a":1},{"b":2}]
如果您的jq没有transpose,下面是它的定义:
# transpose a possibly jagged matrix, quickly;
# rows are padded with nulls so the result is always rectangular.
def transpose:
[range(0; (map(length) | max)) as $j
| [range(0; length) as $i | .[$i][$j] ] ] ;或者,如果您想要一个非常简短的zip
def zip: [range(0; .[0]|length) as $i | [.[0][$i], .[1][$i]]];发布于 2017-08-26 16:27:13
下面是一个解决方案,用于处理第一个数组包含键名的一般情况,下面的数组包含使用transpose和from_entries的值
{h:.[0], v:.[1:][]} # {h:[keys], v:[values]}
| [.h, .v] # [ [keys], [values] ] ...
| [ transpose[] | {key:.[0], value:.[1]} ] # [ {"key":key, "value":value}, ... ]
| from_entries # { key:value, key:value, ... }例如,如果此筛选器位于filter.jq中,则data.json包含
["time","guest_nice","guest","steal","softirq","irq","user","system","nice","iowait"]
[1460728600,0,0,0,0.45731,0,0.25108,11.74702,48.22465,0]
[1460728601,0,0,0,0.45732,0,0.25109,12.74703,49,0]然后命令
jq -M -s -c -f filter.jq data.json产生
{"time":1460728600,"guest_nice":0,"guest":0,"steal":0,"softirq":0.45731,"irq":0,"user":0.25108,"system":11.74702,"nice":48.22465,"iowait":0}
{"time":1460728601,"guest_nice":0,"guest":0,"steal":0,"softirq":0.45732,"irq":0,"user":0.25109,"system":12.74703,"nice":49,"iowait":0}https://stackoverflow.com/questions/36649328
复制相似问题