Jolt Transform 将扁平数组中的数据提取到对象中
Jolt Transform extracting data from flattened array into object
我在从展平数组中提取数据时遇到了一些问题。我正在展平一个 JSON 文件,然后使用 Jolt 我正在准备数据。
具有这种结构:
{
"body.places[0]_name": "Test",
"body.places[0]_population": "72",
"body.places[1]_name": "Demo",
"body.places[1]_population": "182"
}
我正在尝试:
{
"place_test": "72"
"place_demo": "182"
}
有没有人对制作这个作品有任何想法?
根据您未展开的输入,这可能是 one-liner。这里,我们得先把它展开。
jq '
to_entries
| reduce (
group_by((.key / "_")[0])[]
| map(.key |= (. / "_")[1])
| from_entries
) as $g (
{};
.["place_\($g.name | ascii_downcase)"] = $g.population
)
'
{
"place_test": "72",
"place_demo": "182"
}
为什么不只是:
{ place_test: .["body.places[0]_population"],
place_demo: .["body.places[1]_population"] }
或者如果必须处理尾随逗号:
hjson -j | jq ...
您可以生成两个不同的单独数组,分别表示 name 和 population 值分别在第一个 shift 转换中。然后根据第二个转换规范中数组中的顺序匹配这些元素,并在最后一个规范中使用 Place_ 作为键的前缀,例如
[
{
"operation": "shift",
"spec": {
"body.places\[*\]_n*": "n",
"body.places\[*\]_p*": "p"
}
},
{
"operation": "shift",
"spec": {
"p": {
"*": "@(2,n[&])"
}
}
},
{
"operation": "shift",
"spec": {
"*": "Place_&"
}
}
]
PS : 这看起来像一个 Jolt 问题,除了 jq 标签
我在从展平数组中提取数据时遇到了一些问题。我正在展平一个 JSON 文件,然后使用 Jolt 我正在准备数据。
具有这种结构:
{
"body.places[0]_name": "Test",
"body.places[0]_population": "72",
"body.places[1]_name": "Demo",
"body.places[1]_population": "182"
}
我正在尝试:
{
"place_test": "72"
"place_demo": "182"
}
有没有人对制作这个作品有任何想法?
根据您未展开的输入,这可能是 one-liner。这里,我们得先把它展开。
jq '
to_entries
| reduce (
group_by((.key / "_")[0])[]
| map(.key |= (. / "_")[1])
| from_entries
) as $g (
{};
.["place_\($g.name | ascii_downcase)"] = $g.population
)
'
{
"place_test": "72",
"place_demo": "182"
}
为什么不只是:
{ place_test: .["body.places[0]_population"],
place_demo: .["body.places[1]_population"] }
或者如果必须处理尾随逗号:
hjson -j | jq ...
您可以生成两个不同的单独数组,分别表示 name 和 population 值分别在第一个 shift 转换中。然后根据第二个转换规范中数组中的顺序匹配这些元素,并在最后一个规范中使用 Place_ 作为键的前缀,例如
[
{
"operation": "shift",
"spec": {
"body.places\[*\]_n*": "n",
"body.places\[*\]_p*": "p"
}
},
{
"operation": "shift",
"spec": {
"p": {
"*": "@(2,n[&])"
}
}
},
{
"operation": "shift",
"spec": {
"*": "Place_&"
}
}
]
PS : 这看起来像一个 Jolt 问题,除了 jq 标签