【问题标题】:Need jolt specs for below transformation需要以下转换的颠簸规格
【发布时间】:2020-03-30 10:47:42
【问题描述】:

任何人都可以帮助使用 jolt 将下面提到的输入 json 转换为所需的输出 json 吗?

在树域列表中,我想将“paramid”和“paramvalue”提取到仅匹配的“paramid”的第一级,其余的列表项在该树域列表中应该是完整的。

例如,我想将参数“k1”及其值设为输出中提到的第一级。

输入

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


**Output**

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

【问题讨论】:

    标签: apache-nifi jolt


    【解决方案1】:

    如果我理解你想要做什么(取出键/值对并将它们放在顶层),那么这个规范应该可以做到:

    [
      {
        "operation": "shift",
        "spec": {
          "C": {
            "E": {
              "treefield": {
                "*": {
                  "paramvalue": {
                    "string": "@(2,paramid)"
                  }
                }
              }
            },
            "*": "&"
          },
          "*": "&"
        }
      }
    ]
    

    这适用于单个 JSON 对象。在您的示例输入中,您没有前导数组括号,但确实有一个尾随,因此如果您希望数组中有多个对象并希望它们在数组中输出,则此规范应该有效:

    [
      {
        "operation": "shift",
        "spec": {
          "*": {
            "C": {
              "E": {
                "treefield": {
                  "*": {
                    "paramvalue": {
                      "string": "[&6].@(2,paramid)"
                    }
                  }
                }
              },
              "*": "[&2].&"
            },
            "*": "[&1].&"
          }
        }
      }
    ]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-03
      • 1970-01-01
      相关资源
      最近更新 更多