如何确定 powershell 中锯齿数组的唯一成员?
$jagged='{
"id": "1",
"data": [
{
"id": "1",
"name": "Name1",
"purpose": "purpose1"
},
{
"id": "2",
"purpose": "purpose2"
},
{
"id": "3",
"purpose": "purpose3",
"user": "3"
},
{
"id": "4",
"purpose": "purpose4"
}
]
}' | convertfrom-json
Get-Member 可能只考虑第一个元素
PS C:\> $jagged.data| get-member |where {$_.MemberType -eq "NoteProperty"}
TypeName: System.Management.Automation.PSCustomObject
Name MemberType Definition
---- ---------- ----------
id NoteProperty string id=1
name NoteProperty string name=Name1
purpose NoteProperty string purpose=purpose1
还有其他元素有不同的成员
PS C:\> $jagged.data[2]| get-member |where {$_.MemberType -eq "NoteProperty"}
TypeName: System.Management.Automation.PSCustomObject
Name MemberType Definition
---- ---------- ----------
id NoteProperty string id=3
purpose NoteProperty string purpose=purpose3
user NoteProperty string user=3
我想了解我使用的数据是否有锯齿,以及所有成员(和类型)是什么。我使用的数据是从第三方 Web 服务以 JSON 格式返回的,因此我无法实际预测它何时会发生变化或变化会是什么样子。
答案1
我的解决方案在此作为 PSA,供任何寻找类似解决方案的人使用,并希望由了解正确(并且可能简单)方法的 powershell 专家解答。
function Get-Jagged-Members {
@($Input)| %{get-member -inputobject $_ |where {$_.MemberType -eq "NoteProperty"}} | select Name,@{n="Definition"; e={ if($_.Definition -match "\S+") {$Matches[0]}}} |group Name, Definition|sort Count|select Name,Count
}
PS C:\> $jagged.data | Get-Jagged-Members
Name Count
---- -----
name, string 1
user, string 1
id, string 4
purpose, string 4
它可以完成工作(就目前而言)..