【问题标题】:merging 2 json into one single json with value parsing in bash.将 2 个 json 合并为一个 json,并在 bash 中进行值解析。
【发布时间】:2016-07-27 03:22:05
【问题描述】:

我有两个 JSONS:

{
  "name": "paypal_modmon",
  "description": "Role For Paypal admin-service box",
  "run_list": [
      "recipe[djcm_paypal_win::sslVerify]"
    ]
  }

{
  "name": "paypal_dev",
  "default_attributes": {
    "7-zip": {
        "home": "%SYSTEMDRIVE%\\7-zip"
    },
    "modmon": {
        "env": "dev"
    },
    "paypal": {
        "artifact": "%5BINTEGRATION%5D"
    }
  },
  "override_attributes": {
    "default": {
        "env": "developmen"
    },
    "windows": {
      "password": "Pib1StheK1N5"
    },
    "task_sched":{
      "credentials": "kX?rLQ4XN$q"
    },
    "seven_zip": {
        "url": "https://djcm:Pib1StheK1N5@artifactory.dowjones.io/artifactory/djcm-zip-local/djcm/chef/paypal/7z1514-x64.msi"
    }
  },
  "chef_type": "environment"
}

我想从第二个 json 读取值:“default_attributes”和“override_attributes”,并将它们与第一个 json 合并成一个输出,例如:

{
  "description": "Role For Paypal admin-service box",
  "run_list": [
    "recipe[djcm_paypal_win::sslVerify]"
  ],
  "chef_type": "environment",
    "seven_zip": {
      "url": "https://djcm:Pib1StheK1N5@artifactory.dowjones.io/artifactory/djcm-zip-local/djcm/chef/paypal/7z1514-x64.msi"
    },
    "task_sched": {
      "credentials": "kX?rLQ4XN$q"
    },
    "windows": {
      "password": "Pib1StheK1N5"
    },
    "paypal": {
      "artifact": "%5BINTEGRATION%5D"
    },
    "modmon": {
      "env": "dev"
    },
    "7-zip": {
      "home": "%SYSTEMDRIVE%\\7-zip"
    },
    "default": {
      "env": "developmen"
    },
  "name": "paypal_modmon"
}

有没有办法在 bash 中做到这一点以及如何实现它?

【问题讨论】:

    标签: json bash shell sh jq


    【解决方案1】:

    一般来说,如果您正在读取多个文件,您应该使用--argfile 选项,以便您可以按名称引用文件的内容。从您希望合并的属性的名称来看,您应该警惕您拥有的不同合并选项。 default_attributes 建议如果省略它应该是应该使用的属性。 override_attributes 建议它应该强制输入它的值。

    $ jq --argfile merge input2.json \
    '($merge.default_attributes * .) + $merge.override_attributes' input1.json
    

    通过使用* 将输入与default_attributes 合并,它允许您从默认值开始并在适当位置添加实际值。这样,缺失值最终由默认对象提供。

    然后添加override_attributes 对象,值被完全替换,而不仅仅是合并。

    【讨论】:

      【解决方案2】:

      知道了。用 jq 看起来超级简单:

      jq -s '.[0] + .[1].default_attributes + .[1].override_attributes' a-roles.json a-env.json > manifest.json
      

      manifest.json ->

      {
        "default": {
          "env": "developmen-jq"
        },
        "7-zip": {
          "home": "%SYSTEMDRIVE%\\7-zip"
        },
        "name": "paypal_modmon",
        "description": "Role For Paypal admin-service box",
        "run_list": [
          "recipe[djcm_paypal_win::sslVerify]"
        ],
        "seven_zip": {
          "url": "https://djcm:Pib1StheK1N5@artifactory.dowjones.io/artifactory/djcm-zip-local/djcm/chef/paypal/7z1514-x64.msi"
        },
        "task_sched": {
          "credentials": "kX?rLQ4XN$q"
        },
        "windows": {
          "password": "Pib1StheK1N5"
        },
        "paypal": {
          "artifact": "%5BINTEGRATION%5D"
        },
        "modmon": {
          "env": "dev"
        }
      }
      

      编辑 1:

      我还需要从 a-roles.json 中解析出 run_list 键值对并忽略所有其他信息以获得某些信息:

      {
        "default": {
          "env": "developmen-jq"
        },
        "7-zip": {
          "home": "%SYSTEMDRIVE%\\7-zip"
        },
        "run_list": [
          "recipe[djcm_paypal_win::sslVerify]"
        ],
        "seven_zip": {
          "url": "https://djcm:Pib1StheK1N5@artifactory.dowjones.io/artifactory/djcm-zip-local/djcm/chef/paypal/7z1514-x64.msi"
        },
        "task_sched": {
          "credentials": "kX?rLQ4XN$q"
        },
        "windows": {
          "password": "Pib1StheK1N5"
        },
        "paypal": {
          "artifact": "%5BINTEGRATION%5D"
        },
        "modmon": {
          "env": "dev"
        }
      }
      

      jq 可以吗?

      【讨论】:

        猜你喜欢
        • 2014-02-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-09
        • 2016-04-30
        相关资源
        最近更新 更多