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

如何用jq将含值作键的JSON扁平化并转换为CSV格式?

用jq处理嵌套键值JSON转CSV的方案

这问题我熟!这种嵌套的、以值为键的JSON确实有点绕,但用jq的to_entries就能轻松拆解,直接给你能用的命令和详细说明:

最终可用命令

假设你的JSON文件名为input.json,运行以下命令就能得到你想要的CSV输出:

jq -r 'to_entries[] | .key as $country | .value | to_entries[] | [$country, .key, .value] | @csv' input.json

命令拆解(一步步理解为什么这么写)

我把命令拆成几个核心部分,方便你以后复用思路:

  • to_entries[]:把顶层的JSON对象(比如{"AE": {...}, "AF": {...}})转换成包含key和value的条目数组,遍历每个国家对应的条目。
  • .key as $country:把当前条目的key(也就是国家代码,比如AE)存到变量$country里,后面组合CSV行的时候要用到。
  • .value | to_entries[]:把当前国家对应的运营商对象(比如{"424,2": "Etisalat"})也转换成条目数组,遍历每个运营商的键值对。
  • [$country, .key, .value]:把国家代码、运营商代码、运营商名称三个值组合成一个数组,这就是CSV的一行数据。
  • @csv:jq内置的过滤器,会自动把数组转换成符合CSV规范的字符串——比如带逗号的424,2会被自动加上双引号,避免CSV解析错误。
  • -r:让jq输出原始的字符串(而不是JSON格式的字符串),这样输出就是纯CSV内容,不需要额外处理。

测试验证

用你提供的JSON输入:

{ "AE": { "424,2": "Etisalat", "424,3": "DU" }, "AF": { "412,50": "Etisalat" } }

运行命令后,输出结果完全符合你的期望:

"AE","424,2","Etisalat"
"AE","424,3","DU"
"AF","412,50","Etisalat"

内容的提问来源于stack exchange,提问作者Rajiv Kanchan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:31:36