【问题标题】:Split string to array in nifi jolt在nifi jolt中将字符串拆分为数组
【发布时间】:2020-07-13 04:38:00
【问题描述】:

我正在寻找 jolt 规范以将 treefield 字符串值拆分为下面提到的格式的 JSON 对象列表。

有人可以帮我了解一下颠簸规范,将下面提到的输入转换为输出

输入

[
  {
    "A": "value1",
    "B": "value2",
    "C": {
      "D": "x1",
      "E": {
        "treefield": "k1-value1#k2-value2"
      },
      "F": {
        "a": "x1",
        "x": {
          "y": 1
        }
      },
      "H": "x4"
    }
  }
]

输出

[
  {
    "A": "value1",
    "B": "value2",
    "C": {
      "D": "x1",
      "E": {
        "treefield": [
          {
            "paramid": "k1",
            "paramvalue": {
              "string": "value1"
            }
          },
          {
            "paramid": "k2",
            "paramvalue": {
              "string": "value2"
            }
          }
        ]
      },
      "F": {
        "a": "x1",
        "x": {
          "y": 1
        }
      },
      "H": "x4"
    }
  }
]

【问题讨论】:

  • treefield 值是否总是由两个参数组成?

标签: apache-nifi jolt


【解决方案1】:

这是一个如何管理该问题的示例。我是基于:https://github.com/bazaarvoice/jolt/issues/522

[
  {
    "operation": "shift",
    "spec": {
      "*": {
        "C": {
          "E": {
            "treefield": {
              "*#*": {
                "$(0,1)": "temp[]",
                "$(0,2)": "temp[]"
              }
            }
          }
        }
      }
    }
  },
  {
    "operation": "shift",
    "spec": {
      "temp": {
        "*": {
          "*-*": {
            "$(0,1)": "[#3].paramid",
            "$(0,2)": "[#3].paramvalue.string"
          }
        }
      }
    }
  }
]

【讨论】:

    【解决方案2】:

    您可以连续应用 modify-overwrite-beta 转换以及 split 函数,以便通过 #- 字符分隔相关字符串,然后使用 shift 根据需要转换为形状,例如

    [
      {
        "operation": "modify-overwrite-beta",
        "spec": {
          "*": {
            "C": {
              "E": {
                "*": "=split('#',@(1,&))"
              }
            }
          }
        }
      },
      {
        "operation": "modify-overwrite-beta",
        "spec": {
          "*": {
            "C": {
              "E": {
                "*": "=split('-',@(1,&))"
              }
            }
          }
        }
      },
      {
        "operation": "shift",
        "spec": {
          "*": {
            "*": "&",
            "C": {
              "*": "&1.&",
              "E": {
                "*": {
                  "*": {
                    "0": "&4.&3.&2.[&1].paramid",
                    "1": "&4.&3.&2.[&1].paramvalue.string"
                  }
                }
              }
            }
          }
        }
      }
    ]
    

    【讨论】:

      猜你喜欢
      • 2021-09-13
      • 1970-01-01
      • 1970-01-01
      • 2016-04-01
      • 2012-02-22
      • 1970-01-01
      相关资源
      最近更新 更多