给定以下JSON:
{
"Team1": {
"John Smith": {
"position": "IT Manager",
"employees": [
{
"name": "John Doe",
"position": "Programmer"
},
{
"name": "Jane Vincent",
"position": "Developer"
}
]
},
"Jane Smith": {
"position": "Payroll Manager",
"employees": [
{
"name": "John Bylaw",
"position": "Clerk"
},
{
"name": "Jane Tormel",
"position": "accountant"
}
]
}
},
"Team2": {
"Bob Smith": {
"position": "IT Manager",
"employees": [
{
"name": "Bob Doe",
"position": "Programmer"
},
{
"name": "Margareth Smith",
"position": "Developer"
}
]
},
"Mary Smith": {
"position": "Payroll Manager",
"employees": [
{
"name": "Henry Bylaw",
"position": "Clerk"
},
{
"name": "Eric Tormel",
"position": "accountant"
}
]
}
}
}
我想搜索一个员工的名字,然后返回他/她所在的团队及其经理.比如Henry Bylaw,我想说他的经理是Mary Smith,他们在2队.显然,比这个样本更多的是2个队和更多的经理.
我将JSON放在一个变量中:
$jsonData = '{
"Team1": {
"John Smith" : {
.... Too long to post here but see above.
}
}
}
这样做:
# Convert JSON string to PowerShell object
$data = $jsonData | ConvertFrom-Json
# Function to find What team is on
function FindTeam($employeeName) {
$team1 = $data.Team1 | Where-Object { $_.employees | Where-Object { $_.name -eq $employeeName } }
$team2 = $data.Team2 | Where-Object { $_.employees | Where-Object { $_.name -eq $employeeName } }
if ($team1) {
return "Team #1"
} elseif ($team2) {
return "Team #2"
} else {
return "Not found on any teams"
}
}
# Call the function
$employeeName = "Jane Vincent"
$result = FindTeam $employeeName
Write-Output "$employeeName is on $result"
这将导致:
Jane Vincent is on Not found on any teams
正如您所看到的,这不起作用,也不能扩展到数百个团队. 不,我不能更改JSON的 struct . 我怎么能这样做呢?