You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将VM软件包JSON转换为保留两级父级信息的CSV?

解决JSON转CSV时保留主机名与包名的问题

需要将包含两台VM(host1、host2)软件包信息的JSON转换为CSV,要求保留主机名和包名两级父级信息,但原jq命令输出缺失包名。

原jq命令

jq '.rows[]' | jq -r 'keys[] as $k | "\($k), \(.[$k][] | .arch), \(.[$k][] | .epoch), \(.[$k][] | .installdate | (tonumber|todate)), \(.[$k][] | .release),\(.[$k][] | .version)"'

原输出

host1, x86_64, 7, 2023-08-05T09:18:20Z, 6.0.5.el7_9.5,1.02.170
host2, x86_64, 7, 2023-08-05T10:50:31Z, 6.0.5.el7_9.5,1.02.170

期望输出

host1, packages.device-mapper-event-libs, x86_64, 7, 2023-08-05T09:18:20Z, 6.0.5.el7_9.5,1.02.170
host2, packages.device-mapper-event-libs, x86_64, 7, 2023-08-05T10:50:31Z, 6.0.5.el7_9.5,1.02.170

正确的jq命令

jq -r '.rows[] | keys[] as $host | .[$host] | keys[] as $pkg | "\($host), \($pkg), \(.[$pkg].arch), \(.[$pkg].epoch), \(.[$pkg].installdate | tonumber | todate), \(.[$pkg].release), \(.[$pkg].version)"'

命令说明

  • 遍历.rows[]中的每条主机记录
  • 通过keys[] as $host提取主机名(host1、host2)
  • 进入主机对应的对象后,用keys[] as $pkg提取包名(packages.device-mapper-event-libs)
  • 按顺序拼接主机名、包名及包的各项属性值,完整保留两级父级信息
  • 若单主机下存在多个包,命令会自动为每个包生成独立的CSV行,符合结构化输出要求

内容的提问来源于stack exchange,提问作者Jojo Thomas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 10:57:23