输入:
{
"itemName": null,
"itemNumber": 22
}
输出:
{
"isItemNameNull": true,
"itemNumber": 22
}
如果该值为null,则不应该将其映射,而是将'isItemNameNull'映射为true,
SPEC:
[
{
"operation": "shift",
"spec": {
"itemName": {
"null": {
"true": "isItemNameNull"
},
"": {
"#TRASH": "TRASH"
},
"*": {
"@(2,itemName)": "itemName"
}
},
"itemNumber": {
"null": {
"#TRASH": "TRASH"
},
"": {
"#TRASH": "TRASH"
},
"*": {
"@(2,itemNumber)": "itemNumber"
}
}
}
}
]
我映射了该标志,但是它没有从空状态中获取它。任何人都可以请我帮忙。谢谢。
答案 0 :(得分:0)
没有一个很好的方法。
答案 1 :(得分:0)
我尝试过这种情况。我也在您的输入json中进行了一些编辑。
Input Json
----------
{
"itemName": "null",
"itemNumber": 22
}
SPEC:
----
[
{
"operation": "shift",
"spec": {
"itemName": {
"null": {
"#true": "isItemNameNull"
}
},
"itemNumber": "itemNumber"
}
}
]
Output Json
-----------
{
"isItemNameNull" : "true",
"itemNumber" : 22
}
请尝试一下
答案 2 :(得分:0)
您可以通过结合使用默认和移位操作来实现这一点。
首先使用一个默认值来检测 itemName
是否为 null 并为其分配一个默认值 true
然后使用移位来适当地处理 itemName
:
itemName
为 true
(即默认设置,因为其原始值为 null),则使用 isItemNameNull
的值设置 itemName
itemName
复制到输出中(我假设您想这样做,否则只需保留第二位)[
{
"operation": "default",
"spec": {
"itemName": true
}
},
{
"operation": "shift",
"spec": {
"*": "&",
"itemName": {
"true": {
"@1": "isItemNameNull"
},
"*": {
"@1": "itemName"
}
}
}
}
]
一个警告是,如果输入有一个字符串 "true"
表示 itemName
{
"itemName": "true",
"itemNumber": 22
}
那么输出将是
{
"isItemNameNull": "true",
"itemNumber": 22
}
所以不是万无一失!
要绕过该陷阱,您可以使用 3 步方法:
itemName
为空,则为其分配适当的默认“标记”值itemName
并且如果它具有“标记”值,则将 isItemNameNull
设置为字符串值“true”isItemNameNull
转换为布尔值[
{
"operation": "default",
"spec": {
"itemName": "null_marker"
}
},
{
"operation": "shift",
"spec": {
"*": "&",
"itemName": {
"null_marker": {
"#true" :"isItemNameNull"
},
"*": {
"@1": "itemName"
}
}
}
},
{
"operation": "modify-overwrite-beta",
"spec": {
"isItemNameNull": "=toBoolean"
}
}
]