json 如何在nifi中使用Jolt规范转换数据

rsaldnfx  于 2023-06-07  发布在  其他
关注(0)|答案(2)|浏览(267)

我希望使用Nifi的jolt规格以给定的方式转换此数据。
条件是,如果studentId和loc_id相同,那么我们将合并它们的信息,并按原样传递其余信息。还有空字段“”。

数据

[
  {
    "studentId": "2222",
    "loc_id": "L1",
    "topId": "Lotus",
    "SubID1": "A1",
    "SubID2": "B1"
  },
  {
    "studentId": "2222",
    "loc_id": "L1",
    "topId": "tulip",
    "SubID1": "A2",
    "SubID2": ""
  },
  {
    "studentId": "3333",
    "loc_id": "L3",
    "topId": "Rose",
    "SubID1": "A3",
    "SubID2": ""
  },
  {
    "studentId": "4444",
    "loc_id": "L3",
    "topId": "Rose",
    "SubID1": "A5",
    "SubID2": "B7"
  }
]

震动规范后的数据:前两个数据具有相同的studentId和loc_id,因此我们合并了它们的信息,其余两个数据通过了访问列表

[
  {
    "studentId": "2222",
    "loc_id": "L1",
    "VisitList": [
      {
        "topId": "Lotus",
        "SubID1": "A1",
        "SubID2": "B1"
      },
      {
        "topId": "tulip",
        "SubID1": "A2",
        "SubID2": ""
      }
    ]
  },
  {
    "studentId": "3333",
    "loc_id": "L1",
    "VisitList": [
      {
        "topId": "Rose",
        "SubID1": "A3",
        "SubID2": ""
      }
    ]
  },
  {
    "providerId": "4444",
    "specillity": "L3",
    "VisitList": [
      {
        "topId": "Rose",
        "SubID1": "A5",
        "SubID2": "B7"
      }
    ]
  }
]
hyrbngr7

hyrbngr71#

您可以使用此规范:

[
  {
    "operation": "shift",
    "spec": {
      "*": {
        "@": "@(1,studentId).@(1,loc_id)"
      }
    }
  },
  {
    "operation": "cardinality",
    "spec": {
      "*": {
        "*": "MANY"
      }
    }
  },
  {
    "operation": "shift",
    "spec": {
      "*": {
        "*": {
          "*": {
            "studentId": "[#4].&",
            "loc_id": "[#4].&",
            "topId|SubID*": "[#4].VisitList[&1].&"
          }
        }
      }
    }
  },
  {
    "operation": "cardinality",
    "spec": {
      "*": {
        "studentId": "ONE",
        "loc_id": "ONE"
      }
    }
  }
]

1 - shift:您应该为每个对象创建一个唯一的根。在这种情况下,我们通过组合两个值来创建它,如下所示:@(1,studentId).@(1,loc_id)
2 - cardinality:将每个包含1个对象的对象更改为数组。我们应该这样做,为下一个shift操作准备输入。
3 - shift:创建您想要的输出。
4 - cardinality:在所有对象中将studentIdloc_id更改为字符串。

xqkwcwgp

xqkwcwgp2#

您可以使用JoltTransformJSON处理器。您需要创建一个Jolt规范来合并基于studentIdloc_id的数据。

[
  {
    "operation": "shift",
    "spec": {
      "studentId": "studentId",
      "loc_id": "loc_id"
    }
  },
  {
    "operation": "group",
    "spec": {
      "studentId": "studentId",
      "loc_id": "loc_id",
      "VisitList": "*"
    }
  },
  {
    "operation": "merge",
    "spec": {
      "studentId": "studentId",
      "loc_id": "loc_id",
      "VisitList": "VisitList"
    }
  },
  {
    "operation": "shift",
    "spec": {
      "VisitList": "VisitList"
    }
  }
]

相关问题