首页 > 解决方案 > 使用嵌套对象解析 json 文件

问题描述

我想请你帮忙。

我正在与“jq”解析器作斗争,但没有想法。我只需要从给定的 json 文件中提取所需的行。

这是我的文件:

{
  "SystemInventory": {
    "BIOS": [
      {
        "BIOSReleaseDate": "11/12/2020",
        "FQDD": "BIOS.Setup.1-1",
        "SMBIOSPresent": "True",
        "VersionString": "2.10.0"
      }
    ],
    "CPU": [
      {
        "CPUFamily": "Intel(R) Xeon(TM)",
        "Characteristics": "64-bit capable",
        "CurrentClockSpeed": "2.2 GHz",
        "DeviceDescription": "CPU 1"
      },
      {
        "CPUFamily": "Intel(R) Xeon(TM)",
        "Characteristics": "64-bit capable",
        "CurrentClockSpeed": "2.2 GHz",
        "DeviceDescription": "CPU 2"
      }
    ],
    "iDRACNIC": [
      {
        "IPv4Address": "6.6.16.16",
        "NICDuplex": "Full",
        "NICEnabled": "Enabled",
        "NICSpeed": "100",
        "PermanentMACAddress": "5c:d8:8f:1e:51:ce"
      }
    ]
  }
}

我只需要几行,比如说,我希望输出是这样的:

"BIOSReleaseDate": "11/12/2020"
"VersionString": "2.10.0"
"CPUFamily": "Intel(R) Xeon(TM)"
"DeviceDescription": "CPU 1"
"DeviceDescription": "CPU 2"
"IPv4Address": "6.6.16.16"
"NICSpeed": "100"

我用“jq”解析器尝试了它,但是当涉及到嵌套对象时,我没有想法。有没有办法如何通过 jq 实现这一目标?

我会很感激任何帮助..

提前谢谢了

以下如何根据您的输入解析特定行的方法对我来说似乎更方便:

cat data.json | jq '.SystemInventory.BIOS[0] | {BIOS: .VersionString}'
{
  "BIOS": "2.10.0"
}

cat data.json | jq '.SystemInventory.iDRACNIC[0] | {IP: .IPv4Address}'
{
  "IP": "6.6.16.16"
}

有没有办法在一个命令中实现这一点?提前致谢!

标签: jsonlinuxparsingjq

解决方案


jq '.SystemInventory.BIOS[0].BIOSReleaseDate'似乎很好,但我只会得到一行,以及如何与另一行结合,例如jq '.SystemInventory.iDRACNIC[0].IPv4Address',我会得到两行作为输出?谢谢


推荐阅读