我有以下JSON数据:
{
"status": "ok",
"ok": true,
"data": "MFR-L",
"stores": [{
"name": "KOLL",
"lat": 52.93128,
"lng": 6.962956,
"dist": 1,
"x10": 1.129,
"isOpen": true
},
{
"name": "Takst",
"lat": 52.9523773,
"lng": 6.981644,
"dist": 1.3,
"x10": 1.809,
"isOpen": false
}]
}我试图使用JQ将其转换为平面文件,但我总是遇到各种各样的问题,特别是因为文件类型(“无法使用字符串索引boolean”等)。
到目前为止,This post已经帮助我扁平化了数组的内容,如下所示:
jq -r -s 'map(.stores | map({nm: .name, lt: .lat} | [.nm, .lt])) | add [] | @csv如何将层次结构中较高的内容映射到数组内容?
发布于 2016-09-06 01:00:37
您始终可以从父对象和子对象中分别收集所需的值,并在以后合并它们。
例如,
$ jq -r '[.data] + (.stores[] | [.name, .lat, .lng, .dist]) | @csv' input.json收益率
"MFR-L","KOLL",52.93128,6.962956,1
"MFR-L","Takst",52.9523773,6.981644,1.3发布于 2016-09-08 01:57:35
说明性的JSON可能有几种“扁平化”(例如CSV)的方法,但以下两种方法可能是有意义的。(为了便于阅读,我省略了对@csv的调用。) $ jq '[.data, .stores[][]]' in.json [ "MFR-L", "KOLL", 52.93128, 6.962956, 1, 1.129, true, "Takst", 52.9523773, 6.981644, 1.3, 1.809, false ]
$ jq '.data as $data | .stores[] | [$data, .[]]' in.json [ "MFR-L", "KOLL", 52.93128, 6.962956, 1, 1.129, true ] [ "MFR-L", "Takst", 52.9523773, 6.981644, 1.3, 1.809, false ]
发布于 2017-08-28 13:04:28
这是另一种使用jq变量和字符串插值的方法:
.data as $data
| .stores[]
| "\($data),\(.name),\(.lat),\(.lng),\(.dist),\(.x10),\(.isOpen)"带样本数据的输出:
"MFR-L,KOLL,52.93128,6.962956,1,1.129,true"
"MFR-L,Takst,52.9523773,6.981644,1.3,1.809,false"https://stackoverflow.com/questions/39334801
复制相似问题