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元素中_Json_Jq - Fatal编程技术网

使用JQ将JSON解压到单个JSON元素中

使用JQ将JSON解压到单个JSON元素中,json,jq,Json,Jq,我有一个JSON数组,我正试图使用jq将其解压成一个元素,以便能够被另一个程序读取,但我正在努力找到解决方案 考虑以下例子: [ { "timestamp": "2021-03-24T06:15:42.437Z", "facts": { "data": [ { "usrwww_size": false },

我有一个JSON数组,我正试图使用jq将其解压成一个元素,以便能够被另一个程序读取,但我正在努力找到解决方案

考虑以下例子:

[
  {
    "timestamp": "2021-03-24T06:15:42.437Z",
    "facts": {
      "data": [
        {
          "usrwww_size": false
        },
        {
          "architecture": "amd64"
        },
        {
          "bios_version": "rel-1.11.2-0-gf9626ccb91-prebuilt.qemu-project.org"
        },
        {
          "blockdevices": "sr0,vda"
        }
        ]
    }
  }
]
我想让它看起来像这样,作为一个例子:

{
  "values": {
    "usrwww_size": false,
    "architecture": "amd64",
    "bios_version": "rel-1.11.2-0-gf9626ccb91-prebuilt.qemu-project.org",
    "blockdevices": "sr0,vda"
  }
}
我尝试过以下方法,但没有成功:

使用_entriesselect.key!=事实+.facts |带_项。值=.value[]

输出:

[
  {
    "timestamp": "2021-03-24T06:15:42.437Z",
    "data": [
      {
        "usrwww_size": false
      },
      {
        "architecture": "amd64"
      },
      {
        "bios_version": "rel-1.11.2-0-gf9626ccb91-prebuilt.qemu-project.org"
      },
      {
        "blockdevices": "sr0,vda"
      }
    ]
  }
]
如果我将.value[]调整为。[],则只解压缩一个值,或以错误格式解压缩多个值

我看了地图,过滤器,slurping,但不幸的是没有成功。是否有人能找到解决方案或为我指出正确的方向?我现在很困惑。

您可以将其传递给add以获得单个对象

jq '.[].facts.data | add'

{
  "usrwww_size": false,
  "architecture": "amd64",
  "bios_version": "rel-1.11.2-0-gf9626ccb91-prebuilt.qemu-project.org",
  "blockdevices": "sr0,vda"
}
您可以根据需要添加外部{values:}包装

jq '{ values: .[].facts.data | add }'

{
  "values": {
    "usrwww_size": false,
    "architecture": "amd64",
    "bios_version": "rel-1.11.2-0-gf9626ccb91-prebuilt.qemu-project.org",
    "blockdevices": "sr0,vda"
  }
}

您的输出仅包含来自输入的一个值。其他六种价值观是如何产生的?.values对象是否已创建,只需向其添加属性.usrwww\u size?您的输出与您的input@axiac,则未创建.values对象-它只是对数组中键/值位置的引用。因此,您可以使用.value[1]或.value[1:3]选择某个键来获得一个串,但不幸的是,它没有将其放入我需要的JSON格式中。您的示例输出包含systemd、timezone、uptime等,这些都不在输入中。看起来您正试图将.facts.data[]转换为单个对象,但不清楚。谢谢@karlhorton,我已调整了输出以避免混淆。你说得对,我想把.facts.data[]变成一个单一的对象。谢谢,@Karl thonton,你是个救命恩人。该解决方案100%有效:-