Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.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_Unix_Command Line Interface_Jq - Fatal编程技术网

用jq更新JSON的内部属性

用jq更新JSON的内部属性,json,unix,command-line-interface,jq,Json,Unix,Command Line Interface,Jq,有人能帮我处理jq命令行实用程序来更新JSON对象的内部值吗 我想通过添加几个键值来更改object解释器设置.2B263G4Z1.properties,如“spark.executor.instances”:“16” 到目前为止,我只成功地完全替换了此对象,而没有使用以下命令添加新属性: cat test.json | jq ".interpreterSettings.\"2B188AQ5T\".properties |= { \"spark.executor.instances\": \"1

有人能帮我处理jq命令行实用程序来更新JSON对象的内部值吗

我想通过添加几个键值来更改object
解释器设置.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"
    ]
  }
}
我还尝试了以下操作,但这只打印
解释器设置.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、 你在正确的轨道上-尝试用+=

替换|=很高兴知道它这么简单!如果您没有终端仿真器,在Windows上使用powershell提示符也应该有效。@如果我使用unix,这里的“cat”用法在unix系统中是绝对有效的语法。@snowindy:我的评论是针对Windows命令提示符问题的。我个人不会在任何时候使用它,只有在必要的时候。