gpt4 book ai didi

arrays - 如何将命名列表转换为对象数组

转载 作者:行者123 更新时间:2023-12-02 07:18:53 25 4
gpt4 key购买 nike

我有一些类似这样的数据

{
"type1": [
"a", "b"
],
"type2": [
"c", "d"
],
"type3": "x"
}

我想将其转换为

[
{"value": "a", "type": "type1" },
{"value": "b", "type": "type1" },
{"value": "c", "type": "type2" },
{"value": "d", "type": "type2" },
{"value": "x", "type": "type3" },
]

数组元素可以有一个或多个值。使用 jq 可以吗?

我能够处理非数组元素,但我的表达式仅保留列表中的最后一项。

to_entries 
| map_values({value:[.value]|flatten, type:.key})
| map_values({value:.value[], type:.type})

我得到这个结果,其中元素“b”和“d”被排除在结果之外。

[
{
"value": "a",
"type": "type1"
},
{
"value": "c",
"type": "type2"
},
{
"value": "x",
"type": "type3"
}
]

最佳答案

我更喜欢交替使用各种类型的过滤器,以使其更加紧凑。假设您只需要处理数组或标量的值,我会这样写:

[to_entries[] | {value:(.value | arrays[] // .), type:.key}]

https://jqplay.org/s/1jCG6soXuG

不要低估可以生成多个值的表达式的有用性,有效使用它可以使您的过滤器变得不那么复杂。

关于arrays - 如何将命名列表转换为对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57054073/

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