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

如何用jq将嵌套JSON转换为合并键名的环境变量格式文本?

问题:用jq将嵌套JSON转换为环境变量格式

原始嵌套JSON内容:

{
  "es": {
    "host": "https://es-host.ap-south-1.es.amazonaws.com",
    "user": "es_admin",
    "pass": "pa$$w0rd"
  },
  "db": {
    "host": "https://db-host.ap-south-1.es.amazonaws.com",
    "user": "db_admin",
    "pass": "pa$$w0rd"
  }   
}

需要转换为如下环境变量格式:

ES_HOST="https://es-host.ap-south-1.es.amazonaws.com"
ES_USER="es_admin"
ES_PASS="pa$$w0rd"

DB_HOST="https://db-host.ap-south-1.es.amazonaws.com"
DB_USER="db_admin"
DB_PASS="pa$$w0rd"

解决方案

使用以下纯jq命令即可实现需求:

jq -r 'to_entries | map([.key as $prefix | .value | to_entries[] | ($prefix | ascii_upcase) + "_" + (.key | ascii_upcase) + "=\"" + .value + "\""]) | join("\n\n")' input.json

命令解析:

  • to_entries:将外层JSON对象转换为键值对数组,每个元素结构为{"key": "外层键名", "value": "内层对象"}。
  • map(...):遍历每个外层键值对,处理内层对象的键值对:
    • .key as $prefix:将当前外层键名(如es)存入变量$prefix。
    • .value | to_entries[]:将内层对象也转换为键值对数组并逐个遍历。
    • ($prefix | ascii_upcase) + "_" + (.key | ascii_upcase):把外层键和内层键都转为大写,用下划线拼接成环境变量名(如ES_HOST)。
    • + "=\"" + .value + "\"":将对应的值用双引号包裹,拼接成完整的环境变量字符串。
  • join("\n\n"):将每个外层键对应的环境变量组用空行分隔,最终输出符合要求的格式。

执行命令后,输出结果与预期完全一致。

内容的提问来源于stack exchange,提问作者Ashish Kumar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 08:27:20