我有这个数据:
[
[
"USER",
"TTY",
"FROM",
"LOGIN@",
"IDLE",
"JCPU",
"PCPU",
"WHAT"
],
[
"lava1",
"pts/0",
"157.48.149.102",
"05:03",
"31.00s",
"0.31s",
"0.31s",
"-bash"
],
[
"azureuse",
"pts/1",
"157.48.149.102",
"07:26",
"0.00s",
"0.07s",
"0.05s",
"w"
]
]
我想要这样:
[
{
"USER": "lava1",
"TTY": "pts/0"
},
{
"USER": "azureuse",
"TTY": "pts/1"
}
]
等等,对于所有 K/V 对。 所以基本上
map {(.[0][..]) : [:1][..]})
- 我想在 .[0]
中的一个条目和其余 [:..]
中的相应条目之间创建一个映射
绝对无效的语法,但我正在思考如何做到这一点
我想这就是你要找的
jq '.[0] as $cols
| .[1:]
| map(. as $row
| $cols
| with_entries({ "key": .value,"value": $row[.key]})
)'
结果:
[
{
"USER": "lava1",
"TTY": "pts/0",
"FROM": "157.48.149.102",
"LOGIN@": "05:03",
"IDLE": "31.00s",
"JCPU": "0.31s",
"PCPU": "0.31s",
"WHAT": "-bash"
},
{
"USER": "azureuse",
"TTY": "pts/1",
"FROM": "157.48.149.102",
"LOGIN@": "07:26",
"IDLE": "0.00s",
"JCPU": "0.07s",
"PCPU": "0.05s",
"WHAT": "w"
}
]
阅读更多: https://github.com/stedolan/jq/wiki/Cookbook#zip-column-headers-with-their-rows
试试这个:
jq '.[0] as [$user, $tty] | .[1:] | map({$user:.[0], $tty:.[1]})' input.json
或者如果你想选择你想要的列:
jq '.[0] as $title
| [0, 1] as $cols # Pick the first and second columns
| .[1:] | map(. as $v
| reduce $cols[] as $i ({}; .[$title[$i]]=$v[$i]))'
你可以尝试这样的事情:
function customZip(array1, array2) {
var zipped = [];
for (var i = 0; i < Math.min(array1.length, array2.length); i++) {
zipped.push([array1[i], array2[i]]);
}
return zipped;
}
关键是你需要迭代抛出 2 数组的最小长度
用法:
var array1 = [1, 2, 3];
var array2 = ['a', 'b', 'c'];
var zippedArray = customZip(array1, array2);
console.log(zippedArray); // Output: [[1, 'a'], [2, 'b'], [3, 'c']]