我有一个json对象:
{
"Data" : "{field1: [x,y],
field2: z}",
}
输出json:
{
"field3": "z"
}
"operation": "shift",
"spec":
{
"Data" : {
"*field2:*}*" : {
$(0,2) : "field3"
}
}
}
这里“ Data”的值是一个完整的字符串,而不是json,因此我必须将其分成通配符,现在规范中的第二个“ *”给我值“ z”。有没有更好的方法可以做到这一点,例如说在field2之前或之后出现一个新字段,那么我就不必修改此正则表达式。
答案 0 :(得分:0)
首先,这似乎不希望在JOLT中解决,而是应该提取Data
并将其序列化为JSON。
那是说我设法解决了一些问题,内联说明:
[
//Remove {
{
"operation": "shift",
"spec": {
"Data": {
"{*": {
"$(0,1)": "Data"
}
}
}
},
//Remove }
{
"operation": "shift",
"spec": {
"Data": {
"*}": {
"$(0,1)": "Data"
}
}
}
},
// Split by ,
{
"operation": "modify-overwrite-beta",
"spec": {
"Data": "=split(',', @(2,Data))"
}
},
// Trim
{
"operation": "modify-overwrite-beta",
"spec": {
"Data": {
"*": "=trim"
}
}
},
// Select field2
{
"operation": "shift",
"spec": {
"Data": {
"*": {
"field2:*": {
"$(0,1)": "field3"
}
}
}
}
},
// Trim again
{
"operation": "modify-overwrite-beta",
"spec": {
"*": "=trim"
}
}
]
经过测试:
{
"Data": "{field1: [x,y], field2: z}"
}
和
{
"Data": "{ field2: z, field1: [x,y]}"
}
和
{
"Data": "{field1: [x,y], field2: z, field3: [x,y]}"
}