jq比较两个json并替换值

问题描述

我有两个JSON文件

文件Abc.json

{
  "name": "testfile","version": "1.0","dev": {
    "LoggingLevel": "DEBUG","logging.level.HikariPool": "DEBUG","spring.testname": "@@CONSENT_RW@@","spring.testpassword": "@@CONSETNPWD@@"
  }
}

文件xyz.json

{
  "name": "testset","dev": {
    "@@CONSENT_RW@@": "ARM","@@CONSETNPWD@@": "ARMPWD"
  }
}

因此,如果abc.json中的“ dev”值与xyz.json中的“ dev”键匹配,那么我需要用{{1}中的相应值替换abc.json中的值}。

解决方法

这是一个解决方案:

< abc.json jq --argfile vars xyz.json '
  $vars.dev as $dict
  | .dev |= map_values( $dict[.] // .)'

如果您对使用--argfile不太满意,可以(例如)使用--slurpfile,尽管在这种情况下,$vars.dev将被$vars[0].dev取代