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

使用bash+jq合并两个JSON指定内容时遇异常问题求助

JSON节点合并脚本问题修复

问题概述

有两个JSON文件common.json和pi.json,需要合并两者的common、east节点生成新JSON文件,但现有bash脚本输出不符合预期,存在两个问题:

  • common.json的内容未被提取到结果中
  • App-Env的值不符合期望(原脚本输出为my-pi,期望为1713311902,与SentinelValue值一致)

文件内容

common.json

{
    "common": {
        "Hello": "ABC"
    },
    "east": {
        "Direction": "East"
    },
    "west": {
        "Direction": "West"
    }
}

pi.json

{
    "common": {
       "MyUri": "www.myuri.com"
    },
    "east": {
        "App-Env": "my-pi",
        "SentinelValue": 1713311902
    },
    "west": {
        "App-Env": "my-piw",
        "SentinelValue": 1713311902
    }
}

现有脚本

jq_input_files=("common.json" "pi.json")

jq --slurp 'map({
                 ((.common | keys_unsorted[])): .common[],
                 ((.east | keys_unsorted[])): .east[]
             }) | add' "${jq_input_files[@]}" > "test.json"

错误输出

{
  "MyUri": "www.myuri.com",
  "App-Env": "my-pi",
  "SentinelValue": 1713311902
}

期望输出

{
  "MyUri": "www.myuri.com",
  "App-Env": 1713311902,
  "SentinelValue": 1713311902,
  "Hello": "ABC",
  "Direction": "East"
}

问题分析

  1. common.json内容未被提取:原脚本中map内部的对象构造逻辑错误,使用keys_unsorted[]和.[]展开键值对时,会生成多个独立对象而非单个包含所有键值对的对象,后续add操作无法正确合并前序文件的内容。正确逻辑应为先将每个文件的common和east节点合并为单个对象,再合并所有文件的结果。
  2. App-Env值不符合期望:原脚本直接保留pi.json中App-Env的原始值,未按需求将其替换为同节点下SentinelValue的值,需添加字段替换逻辑。

修复方案

  1. 对每个输入文件,先合并其common和east节点为单个对象:.common + .east
  2. 检测并替换App-Env字段值:若对象存在App-Env,则将其值设为SentinelValue的值
  3. 合并所有处理后的对象,保留所有键值对

最终脚本

jq_input_files=("common.json" "pi.json")

jq --slurp '
    map(
        .common + .east 
        | if .["App-Env"] then .["App-Env"] = .SentinelValue else . end
    ) 
    | add' "${jq_input_files[@]}" > "test.json"

验证结果

运行上述脚本后,test.json内容与期望输出一致(JSON键顺序不影响语义,若需指定顺序可额外添加键排序逻辑):

{
  "Hello": "ABC",
  "Direction": "East",
  "MyUri": "www.myuri.com",
  "App-Env": 1713311902,
  "SentinelValue": 1713311902
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 16:45:05