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
- 删除
数组级别结果
{
"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
- 删除
数组级别结果
{
"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,这可能会更有效率。
阅读有关记录: