使用JQ和Bash在JSON对象中添加键值对

使用JQ和Bash在JSON对象中添加键值对,json,linux,wordpress,bash,jq,Json,Linux,Wordpress,Bash,Jq,编辑这篇文章是为了澄清,因为我第一次做得不好-- 我有一个脚本,它在一个目录中爬行,从WP站点获取信息,并构建一个JSON对象数组,这些对象最终将被馈送到可视化仪表板中。这个脚本工作得很好,但我似乎无法像在第一个对象中那样在每个对象中发布siteurl键 需要用其数组中相应的siteurl替换具有null的密钥对 我觉得我应该能够用jq和--arg name value选项来实现这一点,但我显然做错了什么。不确定是否未正确传递变量,或者这是WPCLI的问题 下面是输出和脚本 [ {

编辑这篇文章是为了澄清,因为我第一次做得不好--

我有一个脚本,它在一个目录中爬行,从WP站点获取信息,并构建一个JSON对象数组,这些对象最终将被馈送到可视化仪表板中。这个脚本工作得很好,但我似乎无法像在第一个对象中那样在每个对象中发布
siteurl

需要用其数组中相应的
siteurl
替换具有null的密钥对

我觉得我应该能够用jq和
--arg name value
选项来实现这一点,但我显然做错了什么。不确定是否未正确传递变量,或者这是WPCLI的问题

下面是输出和脚本

[
  {
    "eventType": "WordpressSite",
    "siteurl": "http://mytest1.com"
  },
  {
    "eventType": "WordpressPlugin",
    "plugin_name": "akismet",
    "plugin_status": "inactive",
    "plugin_update": "available",
    "plugin_version": "4.0.8",
    "siteurl": null
  },
  {
    "eventType": "WordpressPlugin",
    "plugin_name": "hello",
    "plugin_status": "inactive",
    "plugin_update": "none",
    "plugin_version": "1.7",
    "siteurl": null
  },
  {
    "eventType": "WordpressUser",
    "siteurl": null,
    "user_email": "example.user@email.com",
    "user_name": "testuser1",
    "user_registered": "2018-11-26 17:44:09",
    "user_role": "administrator"
  }
]
[
  {
    "eventType": "WordpressSite",
    "siteurl": "http://mytest2.com"
  },
  {
    "eventType": "WordpressPlugin",
    "plugin_name": "akismet",
    "plugin_status": "inactive",
    "plugin_update": "available",
    "plugin_version": "4.0.8",
    "siteurl": null
  },
  {
    "eventType": "WordpressPlugin",
    "plugin_name": "hello",
    "plugin_status": "inactive",
    "plugin_update": "none",
    "plugin_version": "1.7",
    "siteurl": null
  },
  {
    "eventType": "WordpressUser",
    "siteurl": null,
    "user_email": "example.user@email.com",
    "user_name": "testuser2",
    "user_registered": "2018-11-26 17:44:04",
    "user_role": "administrator"
  }
]

要添加
“siteurl”:http://mysite1.com“
到每个对象:

jq 'map(.siteurl = "http://mytest1.com")' file.json
要从第一个对象复制
siteurl

jq '.[0].siteurl as $v | map(.siteurl = $v)' file.json
要添加
“siteurl”:http://mysite1.com“
到每个对象:

jq 'map(.siteurl = "http://mytest1.com")' file.json
要从第一个对象复制
siteurl

jq '.[0].siteurl as $v | map(.siteurl = $v)' file.json

请尽可能遵循以下指南。预期产量是多少?此外,如果您要提供脚本,请尝试使其自包含,以便我们可以执行它。请尽可能遵循上的指导原则。预期产量是多少?另外,如果您要提供一个脚本,请尝试使其自包含,以便我们可以执行它。