PowerShell : 필드 값으로 JSON 개체를 검색합니다.
다음 형식의 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 표현과 유사).
$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
여기서도 같은 질문을 했습니다.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 덕분이에요.
David Brabant의 답변은 내가 필요한 것을 얻도록 이끌었고, 다음과 같은 추가사항을 추가했다.
x.Stuffs | where { $_.Name -eq "Darts" } | Select -ExpandProperty Type
이건 어때?
$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!"}
이는 powershell SO 질문의 이 액세스 값에 기초하고 있습니다.파워셸 정말 멋지지 않아?
PowerShell 5.1에 대해서...
이름이 붙은 파일이 있다고 가정하고 조작하는 것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 를 사용하는 것을 목표로 하고 있는 경우는, 이것이 최적인 방법입니다.
다음은 내 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
}
언급URL : https://stackoverflow.com/questions/16575419/powershell-retrieve-json-object-by-field-value
'source' 카테고리의 다른 글
Cross-Origin Resource Sharing(CORS) 사후 요청을 처리하는 방법 (0) | 2023.04.04 |
---|---|
스프링 부트 1.4테스트: 구성 오류: @Bootstrap 선언이 여러 개 발견되었습니다.와 함께 (0) | 2023.04.04 |
페이지 새로고침 시 리액트 라우터에서 location.state를 클리어하려면 어떻게 해야 합니까? (0) | 2023.04.04 |
스프링 부트: Spring Boot Servlet이니셜라이저는 권장되지 않습니다. (0) | 2023.04.04 |
AngularJS 실패한 리소스 GET (0) | 2023.04.04 |