【发布时间】:2022-10-31 03:52:12
【问题描述】:
我想从 Powershell 中的 JSON 文件中检索数据。我有这个 JSON 数据:
{
"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"
}
]
}
}
]
}
}
我想在 Powershell 中使用 JSONPath $.data.b[*].bData.bAbc[0].bAbcZ 检索数据。预期结果是:
[
"b1AbcZ0",
"b2AbcZ0",
"b3AbcZ0"
]
JSONPath 在 https://jsonpath.com/ 中工作,这就是我尝试在 powershell 中检索它的方式:
$JSON = Get-Content ".\test.json" | Out-String | ConvertFrom-Json
$JSON.data.b[*].bData.bAbc[0].bAbcZ
但是当我在 Powershell 中尝试时,* 无效,这是输出:
+ $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
我也尝试使用$JSON.data.b.bData.bAbc[0].bAbcZ,但它只检索第一个数据,即b1AbcZ0。 Powershell 对象中 JSON 通配符 (*) 的等价物是什么?
【问题讨论】:
-
PowerShell 作为 .NET 语言不支持开箱即用的 JSONPath。您可以使用 Newtonsoft JSON 模块 which does support JSONPath。
标签: json powershell