【问题标题】:Update inner attribute of JSON with jq用 jq 更新 JSON 的内部属性
【发布时间】:2015-09-15 17:05:42
【问题描述】:

有人可以帮我处理 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\" }"

【问题讨论】:

    标签: json unix command-line-interface jq


    【解决方案1】:

    以下工作使用 jq 1.4 或 jq 1.5 和 Mac/Linux shell:

    jq  '.interpreterSettings."2B188AQ5T".properties."spark.executor.instances" = "16" ' test.json
    

    如果您在为 Windows 调整上述内容时遇到问题,我建议将 jq 程序放在一个文件中,比如 my.jq,然后像这样调用它:

    jq -f my.jq test.json
    

    请注意,在这种情况下不需要使用“cat”。

    附言你在正确的轨道上 - 尝试用 +=

    替换 |=

    【讨论】:

    • 很高兴知道它是如此简单!
    • 如果您没有终端模拟器,在 Windows 上使用 powershell 提示符也应该可以工作。
    • @JeffMercado 我使用的是 unix,这里的 'cat' 用法在 unix 系统中是绝对有效的语法。
    • @snowindy:我的评论是针对 Windows 命令提示符问题的。我个人不会尽可能使用它,仅在必要时使用。
    猜你喜欢
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多