我在实施 Jolt Spec 来转换此输入时遇到问题。
输入:
{
"id": 12345,
"category": 2,
"productAttributes": {
"data": [
{
"name": "Size",
"slug": "size",
"value": "10"
},
{
"name": "Color",
"slug": "color",
"value": "Grey"
}
]
}
}
规格:
[
{
"operation": "shift",
"spec": {
"productAttributes": {
"data": {
"*": {
"slug": "attributes[#2].key",
"value": "attributes[#2].value",
"name": "attributes[#2].name"
}
}
}
}
}
]
所需输出:
{
"attributes" : [ {
"key" : "size",
"value" : "10",
"name" : "Size"
}, {
"key" : "color",
"value" : "Grey",
"name" : "Color"
}, {
"key" : "category",
"value" : "2",
"name" : "Category"
} ]
}
我想将 root 中的类别添加到属性数组中。该值将从类别属性中获取。键和名称将填充为静态。
你能帮我吗?谢谢。
你可以使用
a&(3,1)
(或a&(2,1)
)标识符,它会在树上向上移动1
或3
级别后复制第一个2
星号,以便将通用文字ttributes
与对象一起保留将会添加
#
通配符对文字进行硬编码
因此,所需的转变将是
[
{
"operation": "shift",
"spec": {
"productA*": {
"data": {
"*": {
"slug": "a&(3,1).&1.key",
"*": "a&(3,1).&1.&"
},
"#category": "a&(2,1).&1.key",
"@2,category": "a&(2,1).&1.value",
"#Category": "a&(2,1).&1.name"
}
}
}
},
{ //convert to array of obects
"operation": "shift",
"spec": {
"*": {
"*": {
"*": "[#2].&"
}
}
}
},
{ //make all "value"s quoted
"operation": "modify-overwrite-beta",
"spec": {
"*": {
"*": "=toString"
}
}
}
]