我输入了以下 Json:
{
"extraFields": {
"language": "french",
"status": {
"comment": "hey"
}
}
}
使用 Jolt,我想实现以下输出:
{
"extraFields": "{\"language\": \"french\", \"status\": {\"comment\": \"hey\"}}"
}
注意反斜杠。
我成功地使用以下 Jolt 公式做到了这一点:
[
{
"operation": "modify-overwrite-beta",
"spec": {
"extraFields": "=concat('{', '\"language\": ', '\"', @(0,language), '\" ,', '\"status\": ', '{', '\"comment\": ', '\"', @(1,extraFields.status.comment), '\"', '}', '}')"
}
}
]
问题是,
extraFields
的字段是可选含义,有些字段可能不会输入。
例如,可以省略 status
或 language
或两者都省略。
结果是,未输入的键为空值。
是否可以仅连接输入的键?
您可以使用 shift 填充相关字符,然后通过使用 toString
函数(例如)通过 modify 转换对属性进行字符串化
[
{
"operation": "shift",
"spec": {
"*": {
"language": {
"*": "&2.\"&1\".\"&\""
},
"status": {
"*": {
"*": "&3.\"&2\".\"&1\".\"&\""
}
}
}
}
},
{
"operation": "shift",
"spec": {
"*": {
"*language*": {
"*": {
"$": "&3.&2"
}
},
"*status*": {
"*": {
"*": {
"$": "&4.&3.&2"
}
}
}
}
}
},
{
"operation": "modify-overwrite-beta",
"spec": {
"*": "=toString"
}
},
{
"operation": "modify-overwrite-beta",
"spec": {
"temp1": "=toString(@(1,extraFields))",
"temp2": "=split('=',@(1,temp1))",
"extraFields": "=join(':',@(1,temp2))"
}
},
{
"operation": "remove",
"spec": {
"temp*": ""
}
}
]