用JQ去除一层对象嵌套
removing one layer of object nesting with JQ
我一直在修改 JQ 以尝试操作一些数据。到目前为止,以下 JSON 使用我的命令输出:
map({Row: .[] })
| map(select(.Row.ganjalord.latitude | test("SOME_TESTING_CONDITION")?))
输入:
[
{
"Row": {
"ganjalord": {
"latitude": "56.237480",
"temp": 44
}
},
"fighter": "1"
},
{
"Row": {
"ganjalord": {
"latitude": "53.237480",
"temp": 42
}
},
"fighter": "0"
}
]
如何在不按行嵌套的情况下实现样本输出?
示例输出:
[
{
"ganjalord": {
"latitude": "56.237480",
"temp": 44
},
"fighter": "1"
},
{
"ganjalord": {
"latitude": "53.237480",
"temp": 42
},
"fighter": "0"
}
]
我是否使用简单的 select 语句来尝试实现此目的?
给定两个字典,*
运算符合并它们的内容。因此,
jq '[.[] | (. * .Row) | del(.Row)]'
...在给定您的输入时作为输出发出:
[
{
"fighter": "1",
"ganjalord": {
"latitude": "56.237480",
"temp": 44
}
},
{
"fighter": "0",
"ganjalord": {
"latitude": "53.237480",
"temp": 42
}
}
]
如图所示,将以下过滤器应用于 "input",会产生所需的结果:
map( with_entries( if .key == "Row" then .value|to_entries[] else . end) )
理解这一点的关键是 with_entries
首先应用 to_entries
产生 key/value 对,然后应用 from_entries
.
当然,与基于 . * .Row
或 . * Row
(或 .+.Row
或 .Row+.
)的解决方案一样,上述解决方案将导致一些数据丢失,如果任何提升的键名与顶级键名一致。
我一直在修改 JQ 以尝试操作一些数据。到目前为止,以下 JSON 使用我的命令输出:
map({Row: .[] })
| map(select(.Row.ganjalord.latitude | test("SOME_TESTING_CONDITION")?))
输入:
[
{
"Row": {
"ganjalord": {
"latitude": "56.237480",
"temp": 44
}
},
"fighter": "1"
},
{
"Row": {
"ganjalord": {
"latitude": "53.237480",
"temp": 42
}
},
"fighter": "0"
}
]
如何在不按行嵌套的情况下实现样本输出?
示例输出:
[
{
"ganjalord": {
"latitude": "56.237480",
"temp": 44
},
"fighter": "1"
},
{
"ganjalord": {
"latitude": "53.237480",
"temp": 42
},
"fighter": "0"
}
]
我是否使用简单的 select 语句来尝试实现此目的?
给定两个字典,*
运算符合并它们的内容。因此,
jq '[.[] | (. * .Row) | del(.Row)]'
...在给定您的输入时作为输出发出:
[
{
"fighter": "1",
"ganjalord": {
"latitude": "56.237480",
"temp": 44
}
},
{
"fighter": "0",
"ganjalord": {
"latitude": "53.237480",
"temp": 42
}
}
]
如图所示,将以下过滤器应用于 "input",会产生所需的结果:
map( with_entries( if .key == "Row" then .value|to_entries[] else . end) )
理解这一点的关键是 with_entries
首先应用 to_entries
产生 key/value 对,然后应用 from_entries
.
当然,与基于 . * .Row
或 . * Row
(或 .+.Row
或 .Row+.
)的解决方案一样,上述解决方案将导致一些数据丢失,如果任何提升的键名与顶级键名一致。