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

如何在Bash脚本中用jq将JSON键值对导出为指定格式文本文件

解决Bash脚本中jq提取JSON生成键值对格式的问题

核心问题分析

  • 原脚本两次调用jq,重复读取大JSON文件,效率极低
  • 每次用>重定向会覆盖文件内容,最终仅保留最后一行输出
  • jq调用语法存在冗余(多余的.参数),且未直接生成X=值的目标格式

最优解决方案(单次jq调用)

针对大JSON文件的场景,核心优化方向是仅调用一次jq,避免重复读取文件;同时直接通过jq生成目标格式,无需bash层面的额外处理。

简单版本(适合固定少量提取项)

修改后的脚本:

#!/usr/bin/env bash

TestConfig="[...]/config_test.json"

# 清空文件并生成目标格式,仅读取一次JSON
jq -r '"X=" + .abc, "Y=" + .xyz' "$TestConfig" > test_sample.txt
  • 逻辑说明:用jq直接构造"X=" + .abc格式的字符串,通过逗号分隔多个输出项,一次生成两行目标内容并写入文件。

扩展版本(适合大量提取项或需要映射关系)

如果后续需要提取更多键,或者JSON键名与输出的变量名(如abc对应X)不一致,可以用映射对象统一管理对应关系:

#!/usr/bin/env bash

TestConfig="[...]/config_test.json"

# 通过映射对象定义JSON键到输出变量名的对应关系
jq -r '
  {"abc": "X", "xyz": "Y"} as $var_map |
  to_entries[] |
  select(.key | IN($var_map[])) |
  "\($var_map[.key])=\(.value)"
' "$TestConfig" > test_sample.txt
  • 逻辑说明:
    1. 定义$var_map存储JSON键(如abc)到输出变量名(如X)的映射
    2. to_entries[]将JSON对象转为键值对数组
    3. select筛选出在映射范围内的键
    4. 拼接成变量名=值的格式输出

验证结果

执行脚本后,查看输出文件:

cat test_sample.txt

将得到预期结果:

X=test1
Y=test2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 23:09:21