如何从 JSON 中读取嵌套数组元素?
How to read nested array elements from JSON?
我需要用嵌套数组元素解析 JSON 并提取值。
我不确定如何使用嵌套数组来设置输出中的属性值 JSON。
这是输入:
[{
"name": "book1",
"id": 18789,
"locations": [{
"state": "mystate",
"phone": 8877887700
}, {
"state": "mystate1",
"phone": 8877887701
}]
},
{
"name": "book2",
"id": 18781,
"locations": [{
"state": "mystate3",
"phone": 8877887711
}, {
"state": "mystate4",
"phone": 8877887702
}]
}]
这是预期的输出:
{
"name": ["book1", "book2"],
"id": ["18789", "18781"],
"states": [
["mystate", "mystate"],
["mystate3", "mystate4"]
]
}
我正在尝试使用以下 JSLT 表达式:
{
"name" : [for (.)
let s = string(.name)
$s],
"id": [for (.)
let s = string(.id)
$s],
"states": [for (.)
let s = string(.locations)
$s]
}
但我不确定在这种情况下如何设置 states
以便我在输出中具有状态值。
使用 JQ 或 JSONPath 的解决方案也可能有帮助。
使用 JQ 会比这更容易。
{
name: map(.name),
id: map(.id),
states: map(.locations | map(.state))
}
在 JSLT 中你可以这样实现它:
{
"name" : [for (.) .name],
"id": [for (.) .id],
"states": flatten([for (.) [for (.locations) .state]])
}
如您所见,states
键实现起来有点笨拙。我想过让路径表达式遍历数组成为可能,如果我们将其添加到语言中,它可以像这样实现:
{
"name" : .[].name,
"id": .[].id,
"states": .[].locations.[].state
}
我需要用嵌套数组元素解析 JSON 并提取值。
我不确定如何使用嵌套数组来设置输出中的属性值 JSON。
这是输入:
[{
"name": "book1",
"id": 18789,
"locations": [{
"state": "mystate",
"phone": 8877887700
}, {
"state": "mystate1",
"phone": 8877887701
}]
},
{
"name": "book2",
"id": 18781,
"locations": [{
"state": "mystate3",
"phone": 8877887711
}, {
"state": "mystate4",
"phone": 8877887702
}]
}]
这是预期的输出:
{
"name": ["book1", "book2"],
"id": ["18789", "18781"],
"states": [
["mystate", "mystate"],
["mystate3", "mystate4"]
]
}
我正在尝试使用以下 JSLT 表达式:
{
"name" : [for (.)
let s = string(.name)
$s],
"id": [for (.)
let s = string(.id)
$s],
"states": [for (.)
let s = string(.locations)
$s]
}
但我不确定在这种情况下如何设置 states
以便我在输出中具有状态值。
使用 JQ 或 JSONPath 的解决方案也可能有帮助。
使用 JQ 会比这更容易。
{
name: map(.name),
id: map(.id),
states: map(.locations | map(.state))
}
在 JSLT 中你可以这样实现它:
{
"name" : [for (.) .name],
"id": [for (.) .id],
"states": flatten([for (.) [for (.locations) .state]])
}
如您所见,states
键实现起来有点笨拙。我想过让路径表达式遍历数组成为可能,如果我们将其添加到语言中,它可以像这样实现:
{
"name" : .[].name,
"id": .[].id,
"states": .[].locations.[].state
}