我是nifi的新手。我试着创建一个jolt规格,但没有得到它。谁能帮帮我。
详细信息如下:流程文件中的属性:详细信息、id、名称、地址、状态
流文件如下:{"to":"xxx1"},{"to":"xxx2"},{"to":"xxx3"},{"to":"xxxn"}
期望以下输出:
{ "details": "personal",
"home":[
{"mobileno": "xxx1",
"id": "1",
"name" :"bbb",
"address": "Address1" },
{ "mobileno": "xxx2",
"id": "2",
"name": "aaa",
"address": "address2" }
],
"status": "enabled" } 我能够发展到这个地步。但是我不知道如何获取"details“字段
[{
"operation": "shift",
"spec": {
"*": "home",
"mobileno": "home[0].mobileno"
}
}, {
"operation": "default",
"spec": {
"status": "${status}",
"home[]": {
"*": {
"name": "${name}",
"id" : "${id},
"address": "${address}"
}
}
}
}]发布于 2018-02-28 20:26:53
在默认操作中,需要添加详细信息属性。
尝试使用以下jolt规范
[{
"operation": "shift",
"spec": {
"*": "home",
"mobileno": "home[0].mobileno"
}
}, {
"operation": "default",
"spec": {
"status": "${status}",
"details":"${details}",
"home[]": {
"*": {
"name": "${name}",
"id": "${id}",
"address": "${address}"
}
}
}
}]发布于 2018-03-01 00:47:02
除了7632695的答案之外,您的换班规范与输入上的"mobileno“不匹配,请尝试以下方法:
[{
"operation": "shift",
"spec": {
"*": {
"to": "home[&1].mobileno"
}
}
}, {
"operation": "default",
"spec": {
"status": "${status}",
"details": "${details}",
"home[]": {
"*": {
"name": "${name}",
"id": "${id}",
"address": "${address}"
}
}
}
}]还要注意,对于单个流文件,属性是恒定的,因此对于home数组中的每个条目,每个id、name和address字段都是相同的。根据您的属性,JOLT如何知道对第一个元素使用id=1,对第二个元素使用id=2,依此类推?
如果您想使用输入数组的索引作为id,可以将此规范添加到您的链中:
{
"operation": "shift",
"spec": {
"home": {
"*": {
"$": "home[&1].id",
"*": "home[&1].&"
}
},
"*": "&"
}
}如果希望它们从1开始而不是从0开始,可以通过将以下等级库添加到链中来为它们添加1:
{
"operation": "modify-overwrite-beta",
"spec": {
"home": {
"*": {
"id": "=intSum(@0, 1)"
}
}
}
}https://stackoverflow.com/questions/49022560
复制相似问题