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

使用JQ为字符串数组元素添加键前缀以对比JSON应用差异

解决JSON环境-应用列表转环境前缀字符串数组的问题

你需要将包含环境与对应应用列表的JSON数据,转换为以环境键为前缀的字符串数组,以便通过minus操作符对比差异,但目前无法实现前缀添加。以下是针对该需求的具体实现方案:

示例输入

{
  "qa": [
    "app-a",
    "app-b",
    "app-c"
  ],
  "prod": [
    "app-a",
    "app-c",
    "app-e"
  ]
}

预期输出

[
  "qa:app-a",
  "qa:app-b",
  "qa:app-c",
  "prod:app-a",
  "prod:app-c",
  "prod:app-e"
]

实现方案

Python 版本

通过遍历JSON解析后的字典,逐个拼接环境前缀与应用名称:

import json

# 解析输入JSON
input_json = '''{
  "qa": [
    "app-a",
    "app-b",
    "app-c"
  ],
  "prod": [
    "app-a",
    "app-c",
    "app-e"
  ]
}'''
data = json.loads(input_json)

# 生成目标数组
result = []
for env, apps in data.items():
    for app in apps:
        result.append(f"{env}:{app}")

# 打印格式化后的结果
print(json.dumps(result, indent=2))

JavaScript 版本

利用Object.entries遍历键值对,结合flatMap和map完成拼接与数组扁平化:

const inputData = {
  "qa": [
    "app-a",
    "app-b",
    "app-c"
  ],
  "prod": [
    "app-a",
    "app-c",
    "app-e"
  ]
};

// 生成带前缀的数组
const result = Object.entries(inputData).flatMap(([env, apps]) => {
  return apps.map(app => `${env}:${app}`);
});

// 输出格式化结果
console.log(JSON.stringify(result, null, 2));

差异对比补充

转换完成后,可通过集合操作快速找出环境间的应用差异:

  • Python 找差异:
    qa_set = set(f"qa:{app}" for app in data["qa"])
    prod_set = set(f"prod:{app}" for app in data["prod"])
    
    # QA环境独有应用
    qa_only = qa_set - prod_set
    # Prod环境独有应用
    prod_only = prod_set - qa_set
    
  • JavaScript 找差异:
    // QA环境独有应用
    const qaOnly = result.filter(item => item.startsWith('qa:') && !result.includes(`prod:${item.split(':')[1]}`));
    // Prod环境独有应用
    const prodOnly = result.filter(item => item.startsWith('prod:') && !result.includes(`qa:${item.split(':')[1]}`));
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 14:00:51