【发布时间】:2021-01-27 17:35:45
【问题描述】:
我想请你帮忙。
我正在与“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"
}
有没有办法在一个命令中实现这一点? 提前致谢!
【问题讨论】:
-
我建议显示您用于更简单情况的代码。
-
jq '.SystemInventory.BIOS[0].BIOSReleaseDate'等有什么问题? -
在没有需求描述和某种代码或伪代码的情况下,很难从单个输入示例和预期输出中辨别需求!