[英]Processing JSON of arrays in array with jq
環境:JQ 1.5,Windows 64位。
我有以下JSON:
{
"unique": 1924,
"coordinates": [
{
"time": "2015-01-25T00:00:01.683",
"xyz": [
{
"z": 4,
"y": 2,
"x": 1,
"id": 99
},
{
"z": 9,
"y": 9,
"x": 8,
"id": 100
},
{
"z": 9,
"y": 6,
"x": 10,
"id": 101
}
]
},
{
"time": "2015-01-25T00:00:02.790",
"xyz": [
{
"z": 0,
"y": 3,
"x": 7,
"id": 99
},
{
"z": 4,
"y": 6,
"x": 2,
"id": 100
},
{
"z": 2,
"y": 9,
"x": 51,
"id": 101
}
]
}
]
}
並希望通過jq將其轉換為CSV格式:
unique,time,id,x,y,z
1924,"2015-01-25T00:00:01.683",99,1,2,4
1924,"2015-01-25T00:00:01.683",100,8,9,9
(等等)
我嘗試了一些事情,例如:
jq -r '{unique: .unique, coordinates: .coordinates[].xyz[] | [.id, .x, .y, .z], time: .coordinates.[].time} | flatten | @csv'
這給了我我想要的JSON,但是每個id,x,y和z相乘(即,每行唯一的行出現四次-id,x,y,z分別一個)。
為數組分配一個數字,例如
jq -r '{unique: .unique, coordinates: .coordinates[0].xyz[] | [.id, .x, .y, .z], time: .coordinates.[0].time} | flatten | @csv'
給我coordinates
數組的第一個索引,但是我很自然地想要所有這些。
第一步是將結果平整為行。
[{ unique } + (.coordinates[] | { time } + .xyz[])]
這將產生每行對象數組:
[
{
"unique": 1924,
"time": "2015-01-25T00:00:01.683",
"id": 99,
"x": 1,
"y": 2,
"z": 4
},
{
"unique": 1924,
"time": "2015-01-25T00:00:01.683",
"id": 100,
"x": 8,
"y": 9,
"z": 9
},
{
"unique": 1924,
"time": "2015-01-25T00:00:01.683",
"id": 101,
"x": 10,
"y": 6,
"z": 9
},
{
"unique": 1924,
"time": "2015-01-25T00:00:02.790",
"id": 99,
"x": 7,
"y": 3,
"z": 0
},
...
]
然后,只需將其轉換為csv行即可。
["unique","time","id","x","y","z"] as $fields | $fields, (.[] | [.[$fields[]]]) | @csv
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.