我正在尝试使用jq为我解析JSON文件。我想从定义标头中获取一个值代替索引,并输出到输出数据中。简化示例:
{
"header": {
"type": {
"0": {
"name": "Cats"
},
"3": {
"name": "Dogs"
}
}
},
"data": [
{
"time": "2019-01-01T02:00:00Z",
"reading": {
"0": {"value": 90, "note": "start" },
"3": {"value": 100 }
}
}
]
}
使用jq '.data[] | {time: .time, data: .reading[]}'
之类的jq命令会给我:
"time": "2019-01-01T02:00:00Z",
"data": {
"value": 90,
"note": "start"
}
}
{
"time": "2019-01-01T02:00:00Z",
"data": {
"value": 100
}
}
我需要将“ Cats”或“ Dogs”放入结果中,以进行SQL插入。
类似的东西:
{
"time": "2019-01-01T02:00:00Z",
"data": {
"type: "Cats", <- line added
"value": 90,
"note": "start"
}
}
...
或更妙的是:
{
"time": "2019-01-01T02:00:00Z",
"Cats": { <- label set to "Cats" instead of "data"
"value": 90,
"note": "start"
}
}
...
有没有办法获取-我看到的数组索引为“ 0”或“ 3”-被添加为“猫”或“狗”?
答案 0 :(得分:1)
使用内置函数INDEX
创建字典可以实现以下简单的解决方案:
(.header.type
| INDEX(to_entries[]; .key)
| map_values(.value.name)) as $dict
| .data[]
| (.reading | keys_unsorted[]) as $k
| {time} + { ($dict[$k]) : .reading[$k] }
{
"time": "2019-01-01T02:00:00Z",
"Cats": {
"value": 90,
"note": "start"
}
}
{
"time": "2019-01-01T02:00:00Z",
"Dogs": {
"value": 100
}
}