I want to retrieve data from JSON file in Powershell. I have this JSON data:
{
"id": "abcxyz",
"data": {
"a": {
"abc": "xyz"
},
"b": [
{
"bId": 2001,
"bData": {
"bAbc": [
{
"bAbcX": 123,
"bAbcY": 456,
"bAbcZ": "b1AbcZ0"
},
{
"bAbcX": 312,
"bAbcY": 654,
"bAbcZ": "b1AbcZ1"
}
],
"bDef": [
{
"bDefX": 456,
"bDefY": 654,
"bDefZ": "b1DefZ0"
},
{
"bDefX": 789,
"bDefY": 987,
"bDefZ": "b1DefZ1"
}
]
}
},
{
"bId": 2002,
"bData": {
"bAbc": [
{
"bAbcX": 123,
"bAbcY": 456,
"bAbcZ": "b2AbcZ0"
},
{
"bAbcX": 312,
"bAbcY": 654,
"bAbcZ": "b2AbcZ1"
}
],
"bDef": [
{
"bDefX": 456,
"bDefY": 654,
"bDefZ": "b2DefZ0"
},
{
"bDefX": 789,
"bDefY": 987,
"bDefZ": "b2DefZ1"
}
]
}
},
{
"bId": 2003,
"bData": {
"bAbc": [
{
"bAbcX": 123,
"bAbcY": 456,
"bAbcZ": "b3AbcZ0"
},
{
"bAbcX": 312,
"bAbcY": 654,
"bAbcZ": "b3AbcZ1"
}
],
"bDef": [
{
"bDefX": 456,
"bDefY": 654,
"bDefZ": "b3DefZ0"
},
{
"bDefX": 789,
"bDefY": 987,
"bDefZ": "b3DefZ1"
}
]
}
}
]
}
}
I want to retrieve data with JSONPath $.data.b[*].bData.bAbc[0].bAbcZ in Powershell. The expected result is:
[
"b1AbcZ0",
"b2AbcZ0",
"b3AbcZ0"
]
The JSONPath is working in https://jsonpath.com/ and this is how I tried to retrieve it in powershell:
$JSON = Get-Content ".\test.json" | Out-String | ConvertFrom-Json
$JSON.data.b[*].bData.bAbc[0].bAbcZ
But when I tried in Powershell, * is invalid, this is the output:
+ $JSON.data.b[*].bData.bAbc[0].bAbcZ
+ ~
Array index expression is missing or not valid.
+ $JSON.data.b[*].bData.bAbc[0].bAbcZ
+ ~
You must provide a value expression following the '*' operator.
+ $JSON.data.b[*].bData.bAbc[0].bAbcZ
+ ~
Unexpected token ']' in expression or statement.
+ CategoryInfo : ParserError: (:) [], ParseException
+ FullyQualifiedErrorId : MissingArrayIndexExpression
I also tried using $JSON.data.b.bData.bAbc[0].bAbcZ but it only retrieve the first data which is b1AbcZ0. What's the equivalent of JSON Wildcard (*) in Powershell object?