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