我输入的格式为:
[
{
"name":"Product one",
"productId":"12345",
"itemCode":"7037"
},
{
"name":"Product two",
"productId":"67890",
"itemCode":"9101"
},
{
"name":"Product three",
"productId":"111213",
"itemCode":"7047"
}
]
对于数组中的每个对象,我想获取name属性的值,并将其用作结果对象的属性名称。我想要的输出是:
{
"Product one": {
"productId":"12345",
"itemCode":"7037"
},
"Product two": {
"productId":"67890",
"itemCode":"9101"
},
"Product three": {
"productId":"111213",
"itemCode":"7047"
}
}
这是我能够找到的最接近的地方:
.[] | { (.name) : { productId: .productId, vendorId: .vendorId } }
这是产生的输出:
{
"Product one": {
"productId": "12345",
"vendorId": null
}
}
{
"Product two": {
"productId": "67890",
"vendorId": null
}
}
{
"Product three": {
"productId": "111213",
"vendorId": null
}
}
这会创建双嵌套产品,并且不会在它们之间包含空格。
感谢您提前提供任何帮助。
答案 0 :(得分:1)
将数组转换为对象的最简单方法可以通过from_entries
函数,如下所示:
map({key: .name, value: del(.name)}) | from_entries
答案 1 :(得分:1)
这里最简单的方法是在数组中创建三个对象,然后“添加”它们:
{
"Product one": {
"productId": "12345",
"itemCode": "7037"
},
"Product two": {
"productId": "67890",
"itemCode": "9101"
},
"Product three": {
"productId": "111213",
"itemCode": "7047"
}
}
输出:
{{1}}
答案 2 :(得分:0)
以下是使用 reduce :
的解决方案reduce .[] as $e (
{}
; .[$e.name] = ($e | del(.name))
)