以这种格式考虑JSON:
"Stuffs": [
{
"Name": "Darts",
"Type": "Fun Stuff"
},
{
"Name": "Clean Toilet",
"Type": "Boring Stuff"
}
]
在PowerShell 3中,我们可以获得一个Stuffs列表:
$JSON = Get-Content $jsonConfigFile | Out-String | ConvertFrom-Json
假设我们不知道列表的确切内容,包括对象的排序,我们如何检索具有Name字段的特定值的对象?
蛮力,我们可以遍历列表:
foreach( $Stuff in $JSON.Stuffs ) {
但我希望存在一种更直接的机制(类似于C#中的Lync或Lambda表达式)。
答案 0 :(得分:57)
$json = @"
{
"Stuffs":
[
{
"Name": "Darts",
"Type": "Fun Stuff"
},
{
"Name": "Clean Toilet",
"Type": "Boring Stuff"
}
]
}
"@
$x = $json | ConvertFrom-Json
$x.Stuffs[0] # access to Darts
$x.Stuffs[1] # access to Clean Toilet
$darts = $x.Stuffs | where { $_.Name -eq "Darts" } #Darts
答案 1 :(得分:22)
我刚刚在这里问了同样的问题:https://stackoverflow.com/a/23062370/3532136 它有一个很好的解决方案。我希望它有助于^^。 在简历中,您可以使用:
我案例中的Json文件名为jsonfile.json
:
{
"CARD_MODEL_TITLE": "OWNER'S MANUAL",
"CARD_MODEL_SUBTITLE": "Configure your download",
"CARD_MODEL_SELECT": "Select Model",
"CARD_LANG_TITLE": "Select Language",
"CARD_LANG_DEVICE_LANG": "Your device",
"CARD_YEAR_TITLE": "Select Model Year",
"CARD_YEAR_LATEST": "(Latest)",
"STEPS_MODEL": "Model",
"STEPS_LANGUAGE": "Language",
"STEPS_YEAR": "Model Year",
"BUTTON_BACK": "Back",
"BUTTON_NEXT": "Next",
"BUTTON_CLOSE": "Close"
}
代码:
$json = (Get-Content "jsonfile.json" -Raw) | ConvertFrom-Json
$json.psobject.properties.name
输出:
CARD_MODEL_TITLE
CARD_MODEL_SUBTITLE
CARD_MODEL_SELECT
CARD_LANG_TITLE
CARD_LANG_DEVICE_LANG
CARD_YEAR_TITLE
CARD_YEAR_LATEST
STEPS_MODEL
STEPS_LANGUAGE
STEPS_YEAR
BUTTON_BACK
BUTTON_NEXT
BUTTON_CLOSE
感谢mjolinor。
答案 2 :(得分:14)
x.Stuffs | where { $_.Name -eq "Darts" } | Select -ExpandProperty Type
答案 3 :(得分:2)
关于PowerShell 5.1(在PowerShell 7中非常容易)...
假设我们有一个名为jsonConfigFile.json
的文件,其中包含您帖子中的以下内容:
{
"Stuffs": [
{
"Name": "Darts",
"Type": "Fun Stuff"
},
{
"Name": "Clean Toilet",
"Type": "Boring Stuff"
}
]
}
这将从JSON文件创建有序哈希表,以帮助简化检索:
$json = [ordered]@{}
(Get-Content "jsonConfigFile.json" -Raw | ConvertFrom-Json).PSObject.Properties |
ForEach-Object { $json[$_.Name] = $_.Value }
$json.Stuffs
将列出一个不错的哈希表,但是从这里开始它会变得更加复杂。假设您希望将Type
键的值与Clean Toilet
键相关联,则可以这样检索它:
$json.Stuffs.Where({$_.Name -eq "Clean Toilet"}).Type
这很麻烦,但是如果您的目标是在准系统的Windows 10安装上使用JSON,那么据我所知,这是最好的方法。
答案 4 :(得分:0)
这是我的json数据:
[
{
"name":"Test",
"value":"TestValue"
},
{
"name":"Test",
"value":"TestValue"
}
]
Powershell脚本:
$data = Get-Content "Path to json file" | Out-String | ConvertFrom-Json
foreach ($line in $data) {
$line.name
}
答案 5 :(得分:0)
如何?
$json=Get-Content -Raw -Path 'my.json' | Out-String | ConvertFrom-Json
$foo="TheVariableYourUsingToSelectSomething"
$json.SomePathYouKnow.psobject.properties.Where({$_.name -eq $foo}).value
将从json结构中选择
{"SomePathYouKnow":{"TheVariableYourUsingToSelectSomething": "Tada!"}
这是基于此accessing values in powershell SO question 。 Powershell很棒吗?