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

如何通过Ansible将源JSON字典值动态更新到目标JSON对应条目

解决方案

不要用replace模块做正则文本匹配,很容易因为JSON格式排版变化、字段重复出现匹配错误,直接用JSON结构化处理的方式更稳妥,完整playbook如下:

- hosts: localhost
  gather_facts: no
  tasks:
    # 读取源JSON文件内容并解析
    - name: 加载源JSON数据
      set_fact:
        source_json: "{{ lookup('file', 'Source.json') | from_json }}"

    # 读取目标JSON文件内容并解析
    - name: 加载目标JSON数据
      set_fact:
        dest_json: "{{ lookup('file', 'Destination.json') | from_json }}"

    # 将源JSON的列表转换为键值对字典,方便后续快速查询匹配
    - name: 构建源数据键值映射表
      set_fact:
        source_map: "{{ source_map | default({}) | combine({item.key: item.value}) }}"
      loop: "{{ source_json }}"

    # 遍历目标JSON的每一项,匹配到对应key就替换value,未匹配就保留原值
    - name: 合并更新目标JSON数据
      set_fact:
        updated_dest: "{{ updated_dest | default([]) + [item | combine({'value': source_map[item.key]}) if item.key in source_map else item] }}"
      loop: "{{ dest_json }}"

    # 将处理后的结果格式化后写回目标文件
    - name: 写入更新后的目标JSON文件
      copy:
        content: "{{ updated_dest | to_nice_json(indent=4) }}"
        dest: Destination.json

如果你的需求是替换后的value需要前后加**(和你示例的期望输出一致),只需要修改更新步骤的value取值即可,对应修改为:

item | combine({'value': '**' + source_map[item.key] + '**'})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 23:36:03