JQ分组拼接文本对象问题:JSON转CSV无法合并同车型条目
用JQ合并同车型用户条目生成目标CSV
原始JSON数据
[{"State": "NewYork","Drivers": [ {"Car": "Jetta","Users": [{"Name": "Steve","Details": {"Location": "Home","Time": "9a-7p"}}]}, {"Car": "Jetta","Users": [{"Name": "Roger","Details": {"Location": "Office","Time": "3p-6p"}}]}, {"Car": "Ford","Users": [{"Name": "John","Details": {"Location": "Home","Time": "12p-5p"}}]} ]}]
期望输出CSV
"NewYork","Jetta","Steve;Roger","Home;Office","9a-7p;3p-6p" "NewYork","Ford","John","Home","12p-5p"
无效的JQ代码
.[] | .Drivers[] | .Car as $car | .Users[] | [$car, .Name] | @csv
正确的JQ解决方案
要实现同车型下用户条目的合并,核心是按Car字段分组,再把每组内的用户信息用分号拼接:
.[] | .State as $state | .Drivers | group_by(.Car)[] | $state as $s | .[0].Car as $car | (map(.Users[].Name) | join(";")) as $names | (map(.Users[].Details.Location) | join(";")) as $locations | (map(.Users[].Details.Time) | join(";")) as $times | [$s, $car, $names, $locations, $times] | @csv
代码说明
- 先提取
State并保存为变量,避免分组后丢失该字段 - 对
Drivers数组按Car分组,得到每个车型的独立分组 - 从分组中提取车型名称,再分别把组内所有用户的
Name、Location、Time提取后用分号拼接 - 最后将
State、车型、拼接后的用户信息组成数组,转换为CSV格式
内容的提问来源于stack exchange,提问作者CD007
相关产品推荐
相关产品推荐

