我想请你帮忙。
我正在与“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"
}
有没有办法在一个命令中实现这一目标? 提前致谢!
答案 0 :(得分:0)
对于您的示例,以下调用会根据我认为的要求生成如下所示的输出,尽管输出与问题中显示的内容略有不同:
jq -r -f program.jq myfile.json
其中 program.jq 包含:
.SystemInventory[][]
| {BIOSReleaseDate, VersionString, CPUFamily, DeviceDescription, IPv4Address, NICSpeed}
| to_entries[]
| select(.value != null)
| "\"\(.key)\": \"\(.value)\""
"BIOSReleaseDate": "11/12/2020"
"VersionString": "2.10.0"
"CPUFamily": "Intel(R) Xeon(TM)"
"DeviceDescription": "CPU 1"
"CPUFamily": "Intel(R) Xeon(TM)"
"DeviceDescription": "CPU 2"
"IPv4Address": "6.6.16.16"
"NICSpeed": "100"
答案 1 :(得分:0)
jq '.SystemInventory.BIOS[0].BIOSReleaseDate'
似乎没问题,但我只会得到一行,以及如何与其他行结合,例如jq '.SystemInventory.iDRACNIC[0].IPv4Address'
所以我会得到两行作为输出??
谢谢