【问题标题】:How to keep a condition for null value in jolt?如何在颠簸中保持空值的条件?
【发布时间】:2019-04-23 17:04:07
【问题描述】:

输入:

 { 
   "itemName": null,
   "itemNumber": 22
 }

输出:

 {
   "isItemNameNull": true,
   "itemNumber": 22
 }

如果值为 null,我不应该映射该值,而是将 'isItemNameNull' 映射为 true,

规格:

[
 {
"operation": "shift",
"spec": {
  "itemName": {
    "null": {
      "true": "isItemNameNull"
    },
    "": {
      "#TRASH": "TRASH"
    },
    "*": {
      "@(2,itemName)": "itemName"
    }
  },
  "itemNumber": {
    "null": {
      "#TRASH": "TRASH"
    },
    "": {
      "#TRASH": "TRASH"
    },
    "*": {
      "@(2,itemNumber)": "itemNumber"
    }
  }
  }
 }
]

我映射了标志,但它没有从 null 条件中获取它。任何人都可以建议我帮助。谢谢。

【问题讨论】:

    标签: json transformation jolt


    【解决方案1】:

    没有什么好的方法。

    【讨论】:

      【解决方案2】:

      我试过这个案例。我也在您的输入 json 中进行了一些编辑。

      Input Json
      ----------
      {
        "itemName": "null",
        "itemNumber": 22
      }
      
      
      SPEC:
      ----
          [
            {
              "operation": "shift",
              "spec": {
                "itemName": {
                  "null": {
                    "#true": "isItemNameNull"
                  }
                },
                "itemNumber": "itemNumber"
              }
             }
          ]
      
      Output Json
      -----------
      
      {
        "isItemNameNull" : "true",
        "itemNumber" : 22
      }
      

      请尝试一下

      【讨论】:

        【解决方案3】:

        您可以通过结合使用默认和移位操作来实现这一点。

        首先使用默认值来检测itemName是否为空,并为其分配默认值true

        然后使用 shift 适当地处理itemName

        • 如果itemNametrue(即设置为默认值,因为其原始值为空),则使用itemName 的值设置isItemNameNull
        • 否则将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"
            }
          }
        ]
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2022-11-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-12-11
          相关资源
          最近更新 更多