jq比较两个JSON并替换值
我有两个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
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”}