尝试找到中间的初始 Jolt 配置。问题是,我只需要考虑从 Json 返回的中间名中的第一个字符。另外第一个字符应该是字母(大写或小写),否则我需要返回 null。
M. -> M.
M$ -> M
$M -> null
.M -> null
Mary -> M
1Mary --> null
输入1:
{
"applicant": {
"firstName": "Mary",
"middleName": "M.",
"lastName": "Coker"
}
}
输入2:
{
"applicant": {
"firstName": "Mary",
"middleName": "$M",
"lastName": "Coker"
}
}
1 的所需输出:
{
"applicant": {
"firstName": "Mary",
"middleName": "M",
"lastName": "Coker"
}
}
2 的所需输出:
{
"applicant": {
"firstName": "Mary",
"middleName": null,
"lastName": "Coker"
}
}
享受:)
[
{
"operation": "modify-overwrite-beta",
"spec": {
"applicant": {
"x_middleNameFirstChar": "=substring(@(1,middleName), 0, 1)",
"x_aphabetStr": "ABCDEFGHIJKLMNOPQRSTUVWXYZ",
"x_alphabetSplit": "=split(@(1,x_middleNameFirstChar),@(1,x_aphabetStr))",
"x_splitSize": "=size(@(1,x_alphabetSplit))",
"middleName": null
}
}
}
,
{
"operation": "shift",
"spec": {
"applicant": {
"x_*": null,
"*": "applicant.&",
"x_splitSize": {
"2": {
"@(2,x_middleNameFirstChar)": "applicant.middleName"
}
}
}
}
}
]
您可以使用 toLower 和 toUpper 函数,它们对作为
middleName
的第一个字符的字母分别有不同的影响,而对非字母字符(例如 )没有影响
[
{
"operation": "modify-overwrite-beta",
"spec": {
"*": {
"middleName": "=substring(@(1,&),0,1)",
"up": "=toUpper(@(1,middleName))",
"lw": "=toLower(@(1,middleName))"
}
}
},
{
"operation": "shift",
"spec": {
"*": {
"*": "&1.&",
"up|lw": { "$": "&2.extra.@0" }
}
}
},
{
"operation": "modify-overwrite-beta",
"spec": {
"*": {
"extra": "=size"
}
}
},
{
"operation": "shift",
"spec": {
"*": {
"*": "&1.&",
"middleName": { //get rid of the previosly derived "middleName" value
"": ""
},
"extra": {
"1": { // match middleName with a null
//if both of the derived "middleName" values are equal
"@": "&3.middleName"
},
"2": { //keep the derived "middleName" value if the first character is a letter
//eg.there are two different letters : upper one vs. lower one
"@2,middleName": "&3.middleName"
}
}
}
}
}
]