Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jq比较两个JSON并替换值_Json_Jq_Variadic Templates_Template Engine - Fatal编程技术网

jq比较两个JSON并替换值

jq比较两个JSON并替换值,json,jq,variadic-templates,template-engine,Json,Jq,Variadic Templates,Template Engine,我有两个JSON文件 文件名Abc.json { "name": "testfile", "version": "1.0", "dev": { "LoggingLevel": "DEBUG", "logging.level.HikariPool": "DEBUG", "sp

我有两个JSON文件

文件名
Abc.json

{
  "name": "testfile",
  "version": "1.0",
  "dev": {
    "LoggingLevel": "DEBUG",
    "logging.level.HikariPool": "DEBUG",
    "spring.testname": "@@CONSENT_RW@@",
    "spring.testpassword": "@@CONSETNPWD@@"
  }
}
{
  "name": "testset",
  "version": "1.0",
  "dev": {
    "@@CONSENT_RW@@": "ARM",
    "@@CONSETNPWD@@": "ARMPWD"
  }
}
文件名
xyz.json

{
  "name": "testfile",
  "version": "1.0",
  "dev": {
    "LoggingLevel": "DEBUG",
    "logging.level.HikariPool": "DEBUG",
    "spring.testname": "@@CONSENT_RW@@",
    "spring.testpassword": "@@CONSETNPWD@@"
  }
}
{
  "name": "testset",
  "version": "1.0",
  "dev": {
    "@@CONSENT_RW@@": "ARM",
    "@@CONSETNPWD@@": "ARMPWD"
  }
}
因此,如果
abc.json
中的“dev”值与
xyz.json
中的“dev”键匹配,那么我需要将
abc.json
中的值替换为
xyz.json

中相应的值,这里有一个解决方案:

< abc.json jq --argfile vars xyz.json '
  $vars.dev as $dict
  | .dev |= map_values( $dict[.] // .)'
如果您对使用--argfile感到不安,您可以(例如)使用--slurpfile,尽管在这种情况下,
$vars.dev
将被
$vars[0]替换。dev

这里有一个解决方案:

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

如果您对使用--argfile感到不安,您可以(例如)使用--slurpfile,尽管在这种情况下,
$vars.dev
将被
$vars[0]替换。dev

请澄清匹配标准应该是什么。您指的是xyz.json是哪个“键”?另外,由于SO不是免费的编程服务,所以最好至少展示一个您尝试过的jq程序。这也可能有助于我们更好地理解需求。@peak,我认为OP谈论的键是明确的-变量部分仅在
的“dev”
中,因此显然,
xyz.json
中的标签必须与
的“dev”
中的值匹配,并在后者中替换。若要查看解决方案,您可以运行以下命令:
Hi此处匹配的临界值是@@consence\u RW@@和@@CONSETNPWD@@@files@MADHURAGHAV,一般来说,如果您还显示所需的输出,它会有所帮助(通常情况下,它并不明显,有时也不符合查询的要求)。因此,所需的out of Abc.json应该是{“name”:“testfile”,“版本”:“1.0”、“开发”:{“LoggingLevel”:“DEBUG”、“logging.level.Hikariol”:“DEBUG”、“spring.testname”:“ARM”、“spring.testpassword”:“ARMPWD”}}请澄清匹配条件应该是什么。哪个键“您指的是xyz.json吗?另外,由于SO不是免费的编程服务,所以最好至少展示一个您尝试过的jq程序。这也可能有助于我们更好地理解需求。@peak,我认为OP谈论的键是明确的-变量部分仅在
的“dev”
中,因此显然,
xyz.json
中的标签必须与
的“dev”
中的值匹配,并在后者中替换。若要查看解决方案,您可以运行以下命令:
Hi此处匹配的临界值是@@consence\u RW@@和@@CONSETNPWD@@@files@MADHURAGHAV,一般来说,如果您还显示所需的输出,它会有所帮助(通常情况下,它并不明显,有时也不符合查询的要求)。因此,所需的out of Abc.json应该是{“name”:“testfile”,“版本”:“1.0”,“开发”:{“LoggingLevel”:“DEBUG”,“logging.level.Hikariol”:“DEBUG”,“spring.testname”:“ARM”,“spring.testpassword”:“ARMPWD”}