用 jq 更新 JSON 的内部属性
Update inner attribute of JSON with jq
有人可以帮我处理 jq 命令行实用程序来更新 JSON 对象的内部值吗?
我想通过添加几个键值来更改对象 interpreterSettings.2B263G4Z1.properties
,例如 "spark.executor.instances": "16"
。
到目前为止,我只成功地完全替换了这个对象,没有使用命令添加新属性:
cat test.json | jq ".interpreterSettings.\"2B188AQ5T\".properties |= { \"spark.executor.instances\": \"16\" }"
这是输入JSON:
{
"interpreterSettings": {
"2B263G4Z1": {
"id": "2B263G4Z1",
"name": "sh",
"group": "sh",
"properties": {}
},
"2B188AQ5T": {
"id": "2B188AQ5T",
"name": "spark",
"group": "spark",
"properties": {
"spark.cores.max": "",
"spark.yarn.jar": "",
"master": "yarn-client",
"zeppelin.spark.maxResult": "1000",
"zeppelin.dep.localrepo": "local-repo",
"spark.app.name": "Zeppelin",
"spark.executor.memory": "2560M",
"zeppelin.spark.useHiveContext": "true",
"spark.home": "/usr/lib/spark",
"zeppelin.spark.concurrentSQL": "false",
"args": "",
"zeppelin.pyspark.python": "python"
}
}
},
"interpreterBindings": {
"2AXUMXYK4": [
"2B188AQ5T",
"2AY8SDMRU"
]
}
}
我也尝试了以下方法,但这只打印了 interpreterSettings.2B263G4Z1.properties
的内容,而不是完整的对象。
cat test.json | jq ".interpreterSettings.\"2B188AQ5T\".properties + { \"spark.executor.instances\": \"16\" }"
以下作品使用带有 Mac/Linux shell 的 jq 1.4 或 jq 1.5:
jq '.interpreterSettings."2B188AQ5T".properties."spark.executor.instances" = "16" ' test.json
如果您在为 Windows 调整上述内容时遇到问题,我建议将 jq 程序放在一个文件中,比如 my.jq,然后像这样调用它:
jq -f my.jq test.json
请注意,在这种情况下不需要使用 "cat"。
p.s。您走在正确的轨道上 - 尝试将 |= 替换为 +=
有人可以帮我处理 jq 命令行实用程序来更新 JSON 对象的内部值吗?
我想通过添加几个键值来更改对象 interpreterSettings.2B263G4Z1.properties
,例如 "spark.executor.instances": "16"
。
到目前为止,我只成功地完全替换了这个对象,没有使用命令添加新属性:
cat test.json | jq ".interpreterSettings.\"2B188AQ5T\".properties |= { \"spark.executor.instances\": \"16\" }"
这是输入JSON:
{
"interpreterSettings": {
"2B263G4Z1": {
"id": "2B263G4Z1",
"name": "sh",
"group": "sh",
"properties": {}
},
"2B188AQ5T": {
"id": "2B188AQ5T",
"name": "spark",
"group": "spark",
"properties": {
"spark.cores.max": "",
"spark.yarn.jar": "",
"master": "yarn-client",
"zeppelin.spark.maxResult": "1000",
"zeppelin.dep.localrepo": "local-repo",
"spark.app.name": "Zeppelin",
"spark.executor.memory": "2560M",
"zeppelin.spark.useHiveContext": "true",
"spark.home": "/usr/lib/spark",
"zeppelin.spark.concurrentSQL": "false",
"args": "",
"zeppelin.pyspark.python": "python"
}
}
},
"interpreterBindings": {
"2AXUMXYK4": [
"2B188AQ5T",
"2AY8SDMRU"
]
}
}
我也尝试了以下方法,但这只打印了 interpreterSettings.2B263G4Z1.properties
的内容,而不是完整的对象。
cat test.json | jq ".interpreterSettings.\"2B188AQ5T\".properties + { \"spark.executor.instances\": \"16\" }"
以下作品使用带有 Mac/Linux shell 的 jq 1.4 或 jq 1.5:
jq '.interpreterSettings."2B188AQ5T".properties."spark.executor.instances" = "16" ' test.json
如果您在为 Windows 调整上述内容时遇到问题,我建议将 jq 程序放在一个文件中,比如 my.jq,然后像这样调用它:
jq -f my.jq test.json
请注意,在这种情况下不需要使用 "cat"。
p.s。您走在正确的轨道上 - 尝试将 |= 替换为 +=