我有这个json:
{
"headers": ["x", "y", "z"],
"data": [1, 2, 3, 4, 5, 6, 7, 8, 9],
"rows": ["a", "b", "c"]
}
我想以这个结束:
[{
"row": "a",
"header": "x",
"value": 1
}, {
"row": "a",
"header": "y",
"value": 2
}, {
"row": "a",
"header": "z",
"value": 3
}, {
"row": "b",
"header": "x",
"value": 4
}, {
"row": "b",
"header": "y",
"value": 5
}, {
"row": "b",
"header": "z",
"value": 6
}, {
"row": "c",
"header": "x",
"value": 7
}, {
"row": "c",
"header": "y",
"value": 8
}, {
"row": "c",
"header": "z",
"value": 9
}]
我该怎么做?我一直在修改嵌套的foreach
,直到我的脑袋爆炸。jq很酷,但又与众不同。以下是我在PHP中的操作方法:
$jsonString = '{
"headers": ["x", "y", "z"],
"data": [1, 2, 3, 4, 5, 6, 7, 8, 9],
"rows": ["a", "b", "c"]
}';
$json = json_decode($jsonString);
$output = [];
$k = 0;
foreach($json->rows as $r) {
foreach($json->headers as $h) {
$p = new stdClass();
$p->row = $r;
$p->header = $h;
$p->value = $json->data[$k];
$output[] = $p;
$k++;
}
}
echo json_encode($output);
谢谢!
这里有一个解决方案:
[(.rows|length) as $n
| (.headers|length) as $hl
| range(0; $n) as $r
| range(0; $hl) as $h
| {row: .rows[$r],
header: .headers[$h],
value: .data[$r * $hl + $h] }
]