【发布时间】:2023-03-06 09:18:01
【问题描述】:
我有一个非常奇怪的 json 文件,我正在尝试通过 powershell 从中提取数据。
问题是这个文件的创建者正在以一种我以前从未见过的方式使用 json:
(城市不在数组中,大陆不在数组中等)
缩短的 JSON 文件:
{
"zscloud.net": {
"continent : EMEA": {
"city : Abu Dhabi I": [
{
"range": "147.161.174.0/23",
"vpn": "",
"gre": "",
"hostname": "",
"latitude": "24.453884",
"longitude": "54.3773438"
}
],
"city : Amsterdam II": [
{
"range": "185.46.212.0/23",
"vpn": "amsterdam2-vpn.zscloud.net",
"gre": "185.46.212.36",
"hostname": "ams2.sme.zscloud.net",
"latitude": "52",
"longitude": "5"
},
{
"range": "147.161.228.0/23",
"vpn": "",
"gre": "",
"hostname": "",
"latitude": "52",
"longitude": "5"
},
{
"range": "165.225.240.0/23",
"vpn": "ams2-2-vpn.zscloud.net",
"gre": "165.225.240.42",
"hostname": "ams2-2.sme.zscloud.net",
"latitude": "52",
"longitude": "5"
},
{
"range": "147.161.172.0/23",
"vpn": "",
"gre": "165.225.240.42",
"hostname": "",
"latitude": "52",
"longitude": "5"
},
{
"range": "147.161.230.0/23",
"vpn": "",
"gre": "",
"hostname": "",
"latitude": "52",
"longitude": "5"
},
{
"range": "147.161.232.0/23",
"vpn": "",
"gre": "",
"hostname": "",
"latitude": "52",
"longitude": "5"
},
{
"range": "147.161.234.0/23",
"vpn": "",
"gre": "",
"hostname": "",
"latitude": "52",
"longitude": "5"
},
{
"range": "147.161.224.0/23",
"vpn": "",
"gre": "",
"hostname": "",
"latitude": "52",
"longitude": "5"
},
{
"range": "147.161.226.0/23",
"vpn": "",
"gre": "",
"hostname": "",
"latitude": "52",
"longitude": "5"
}
]
}
}
}
我正在尝试获取城市名称 + 嵌套主机名。
我的选择:
-
我可以使用 Convertfrom-JSON,然后以某种方式遍历几个未知的键和属性。
-
或者我可以使用 select-string 并且基本上只 grep 匹配的正则表达式。然后将它们放入数组等中。
以前,我使用 select-string 来对抗美化的 JSON,因为它更容易。
今天,我发现可能不仅需要主机名,还需要主机名 + 城市名。知道如何从 json 中提取它们吗?
我在 PS5 上。
非常感谢, 紫菀
【问题讨论】:
标签: json powershell select-string