Apache nifi NiFi:JoltTransferMJSON规范

Apache nifi NiFi:JoltTransferMJSON规范,apache-nifi,Apache Nifi,我有以下建议: { "results": [ { "customerClient": { "resourceName": "customers/7876562723/customerClients/8506630423", "clientCustomer": "customers/8506630423",

我有以下建议:

{
  "results": [
    {
      "customerClient": {
        "resourceName": "customers/7876562723/customerClients/8506630423",
        "clientCustomer": "customers/8506630423",
        "hidden": false,
        "level": "1",
        "manager": false,
        "descriptiveName": "BMW",
        "id": "85061423"
      }
    },
    {
      "customerClient": {
        "resourceName": "customers/7876562723/customerClients/6736523142",
        "clientCustomer": "customers/6736523142",
        "hidden": false,
        "level": "1",
        "manager": true,
        "descriptiveName": "Mercedes",
        "id": "67363142"
      }
    }
}
  ],
  "fieldMask": "customerClient.clientCustomer,customerClient.hidden,customerClient.level,customerClient.descriptiveName,customerClient.id,customerClient.manager"
}
我想要的是:

  • 删除
    fieldMask
    参数,所以我不需要将结果作为数组
  • 删除
    结果
    客户
    。 因此,我的JSON应该如下所示:
  • 要删除
    结果
    我正在使用带有拆分值的
    SplitJson
    $.results
    。现在我一直在用JOLT规范修改它。
    如何仅使用
    jolttransfermjson
    执行上述操作?

    首先,您的json是错误的,您有一个额外的}

    不使用震动

    1-生成数据

    2-使用
    $.results.[*].customerClient
    作为属性
    结果

    3-用
    ${results:replace(']',''):replace('['','')}

    这会给你的

    {
        "resourceName": "customers/7876562723/customerClients/8506630423",
        "clientCustomer": "customers/8506630423",
        "hidden": false,
        "level": "1",
        "manager": false,
        "descriptiveName": "BMW",
        "id": "85061423"
    },
    {
        "resourceName": "customers/7876562723/customerClients/6736523142",
        "clientCustomer": "customers/6736523142",
        "hidden": false,
        "level": "1",
        "manager": true,
        "descriptiveName": "Mercedes",
        "id": "67363142"
    }
    

    首先-你的json是错误的,你有一个额外的}

    不使用震动

    1-生成数据

    2-使用
    $.results.[*].customerClient
    作为属性
    结果

    3-用
    ${results:replace(']',''):replace('['','')}

    这会给你的

    {
        "resourceName": "customers/7876562723/customerClients/8506630423",
        "clientCustomer": "customers/8506630423",
        "hidden": false,
        "level": "1",
        "manager": false,
        "descriptiveName": "BMW",
        "id": "85061423"
    },
    {
        "resourceName": "customers/7876562723/customerClients/6736523142",
        "clientCustomer": "customers/6736523142",
        "hidden": false,
        "level": "1",
        "manager": true,
        "descriptiveName": "Mercedes",
        "id": "67363142"
    }
    

    好的,我相信JOLT只能输出一个对象,所以在一次JOLT中不可能将数组的每个元素转换为唯一的对象。但是,您可以在不将FlowFile数据放入属性的情况下获得大部分结果

    我们可以:

    • 删除
      fieldMask
    • 删除
      结果
      数组级别
    使用此选项测试震动:

    假设您的JSON实际上是有效的,那么:

    {
      "results": [
        {
          "customerClient": {
            "resourceName": "customers/7876562723/customerClients/8506630423",
            "clientCustomer": "customers/8506630423",
            "hidden": false,
            "level": "1",
            "manager": false,
            "descriptiveName": "BMW",
            "id": "85061423"
          }
        },
        {
          "customerClient": {
            "resourceName": "customers/7876562723/customerClients/6736523142",
            "clientCustomer": "customers/6736523142",
            "hidden": false,
            "level": "1",
            "manager": true,
            "descriptiveName": "Mercedes",
            "id": "67363142"
          }
        }
      ],
      "fieldMask": "customerClient.clientCustomer,customerClient.hidden,customerClient.level,customerClient.descriptiveName,customerClient.id,customerClient.manager"
    }
    
    您可以使用此颠簸规范:

    [
      {
        "operation": "remove",
        "spec": {
          "fieldMask": ""
        }
      },
      {
        "operation": "shift",
        "spec": {
          "results": {
            "*": {
              "customerClient": "customerClient-&1"
            }
          }
        }
      }
    ]
    
    这将为您提供以下结果:

    {
      "customerClient-0" : {
        "resourceName" : "customers/7876562723/customerClients/8506630423",
        "clientCustomer" : "customers/8506630423",
        "hidden" : false,
        "level" : "1",
        "manager" : false,
        "descriptiveName" : "BMW",
        "id" : "85061423"
      },
      "customerClient-1" : {
        "resourceName" : "customers/7876562723/customerClients/6736523142",
        "clientCustomer" : "customers/6736523142",
        "hidden" : false,
        "level" : "1",
        "manager" : true,
        "descriptiveName" : "Mercedes",
        "id" : "67363142"
      }
    }
    
    因此,您可以仅使用JOLT将JSON转换为平面结构,然后使用SplitJSON分解每个对象(如果需要)

    <>你应该考虑用记录代替SplitJSON,这可能会更有效率。

    阅读有关记录:


    另一个有趣的选择可能是

    Ok,因此我认为JOLT只能输出一个对象,因此在一次JOLT中不可能将数组的每个元素转换为唯一的对象。但是,您可以在不将FlowFile数据放入属性的情况下获得大部分结果

    我们可以:

    • 删除
      fieldMask
    • 删除
      结果
      数组级别
    使用此选项测试震动:

    假设您的JSON实际上是有效的,那么:

    {
      "results": [
        {
          "customerClient": {
            "resourceName": "customers/7876562723/customerClients/8506630423",
            "clientCustomer": "customers/8506630423",
            "hidden": false,
            "level": "1",
            "manager": false,
            "descriptiveName": "BMW",
            "id": "85061423"
          }
        },
        {
          "customerClient": {
            "resourceName": "customers/7876562723/customerClients/6736523142",
            "clientCustomer": "customers/6736523142",
            "hidden": false,
            "level": "1",
            "manager": true,
            "descriptiveName": "Mercedes",
            "id": "67363142"
          }
        }
      ],
      "fieldMask": "customerClient.clientCustomer,customerClient.hidden,customerClient.level,customerClient.descriptiveName,customerClient.id,customerClient.manager"
    }
    
    您可以使用此颠簸规范:

    [
      {
        "operation": "remove",
        "spec": {
          "fieldMask": ""
        }
      },
      {
        "operation": "shift",
        "spec": {
          "results": {
            "*": {
              "customerClient": "customerClient-&1"
            }
          }
        }
      }
    ]
    
    这将为您提供以下结果:

    {
      "customerClient-0" : {
        "resourceName" : "customers/7876562723/customerClients/8506630423",
        "clientCustomer" : "customers/8506630423",
        "hidden" : false,
        "level" : "1",
        "manager" : false,
        "descriptiveName" : "BMW",
        "id" : "85061423"
      },
      "customerClient-1" : {
        "resourceName" : "customers/7876562723/customerClients/6736523142",
        "clientCustomer" : "customers/6736523142",
        "hidden" : false,
        "level" : "1",
        "manager" : true,
        "descriptiveName" : "Mercedes",
        "id" : "67363142"
      }
    }
    
    因此,您可以仅使用JOLT将JSON转换为平面结构,然后使用SplitJSON分解每个对象(如果需要)

    <>你应该考虑用记录代替SplitJSON,这可能会更有效率。

    阅读有关记录:

    另一个有趣的选择可能是