我一直在修补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语句尝试实现这一目标?
答案 0 :(得分:1)
给定两个字典的*
运算符将其内容合并。因此,
jq '[.[] | (. * .Row) | del(.Row)]'
...当输入时发出:
[
{
"fighter": "1",
"ganjalord": {
"latitude": "56.237480",
"temp": 44
}
},
{
"fighter": "0",
"ganjalord": {
"latitude": "53.237480",
"temp": 42
}
}
]
答案 1 :(得分:0)
将以下过滤器应用于“输入”,如图所示,将产生所需的结果:
map( with_entries( if .key == "Row" then .value|to_entries[] else . end) )
了解这一点的关键是with_entries
首先应用to_entries
以产生键/值对,然后应用from_entries
。
当然,与基于. * .Row
或. * Row
(或.+.Row
或.Row+.
)的解决方案一样,如果存在以下任何一种情况,上述解决方案将导致数据丢失悬挂的键名与顶级键名重合。