gpt4 book ai didi

json - jq:将对象数组转换为对象

转载 作者:行者123 更新时间:2023-11-29 09:50:20 24 4
gpt4 key购买 nike

我收到 curl 的回复,格式如下:

[
{
"list": [
{
"value": 1,
"id": 12
},
{
"value": 15,
"id": 13
},
{
"value": -4,
"id": 14
}
]
},
...
]

给定 id 之间的映射是这样的:

{
"12": "newId1",
"13": "newId2",
"14": "newId3"
}

我想做这个:

[
{
"list": {
"newId1": 1,
"newId2": 15,
"newId3": -4,
}
},
...
]

这样我就得到了一个从 id 到值的映射(并且在这个过程中我想重新映射 id)。

我已经为此工作了一段时间,但每次都遇到死胡同。

注意:如有必要,我可以使用 Shell 或类似工具来执行循环。

编辑:这是我目前开发的一个版本:

jq '[].list.id = ($mapping.[] | select(.id == key)) | del(.id)' -M --argjson "mapping" "$mapping"

我不认为它是最好的,但我正在寻找是否可以找到更接近我需要的旧版本。

最佳答案

[编辑:以下响应是对问题的回答,它描述了 (a) 如下所示的映射,以及 (b) 具有以下形式的输入数据:

[
{
"list": [
{
"value": 1,
"id1": 12
},
{
"value": 15,
"id2": 13
},
{
"value": -4,
"id3": 14
}
]
}
]

编辑结束]

在下文中,我将假设映射可通过以下函数获得,但这是一个无关紧要的假设:

def mapping: {
"id1": "newId1",
"id2": "newId2",
"id3": "newId3"
} ;

下面的 jq 过滤器将产生所需的输出:

map( .list
|= (map( to_entries[]
| (mapping[.key]) as $mapped
| select($mapped)
| {($mapped|tostring): .value} )
| add) )

关于json - jq:将对象数组转换为对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49958035/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com