JSON 的 Nifi 属性改变了我的 json 数据顺序
Nifi Attributes to JSON alters my json data order
背景:
我想从
稍微改变一下我的JSON
{
"d0" : 0.0,
"d1" : 0.0,
"d2" : 0.0,
"d3" : 0.0,
"d4" : 0.0,
"d5" : 0.0,
"d6" : 0.0,
"d7" : 0.0
}
至
{ "d0" : [0.0],
"d1" : [0.0],
"d2" : [0.0],
"d3" : [0.0]
"d4" : [0.0],
"d5" : [0.0],
"d6" : [0.0],
"d7" : [0.0]
}
我正在关注对此处给出的问题的答复https://community.cloudera.com/t5/Support-Questions/Groovy-Script-in-ExecuteScript-Processor-To-Format-Date/td-p/230207
据此,我用-
1.EvaluateJsonPath
2.UpdateAttribute
3.AttributesToJson
我的 Nifi 处理部分看起来像这样
related nifi flow
我对3个处理器的设置是-
1.EvaluateJsonPath
settings/ configuration for EvaluateJsonPath
2.UpdateAttribute
settings/ configuration for UpdateAttribute
3.AttributesToJson
settings/ configuration for AttributesToJson
但是 AttributesToJson 只是将平面 JSON 中数据的顺序更改为
{
"d4" : [0.0],
"d5" : [0.0],
"d6" : [0.0],
"d7" : [0.0],
"d0" : [0.0],
"d1" : [0.0],
"d2" : [0.0],
"d3" : [0.0]
}
问题:
为什么 AttributesToJson 会这样?我应该如何将其更改为从 d0 到 d7 的正确顺序?
我需要正确的顺序,因为这应该是 POST 请求的正文。
使用 JoltTransformJson
处理器以所需顺序获取 json 列并保留以下
spec:
[{
"operation": "shift",
"spec": {
"d1": "d1",
"d2": "d2",
"d3": "d3",
"d4": "d4",
"d5": "d5",
"d6": "d6",
"d7": "d7"
}
}
]
现在输出流文件将按照您期望的正确顺序排列:
{
"d1" : [ 0 ],
"d2" : [ 0 ],
"d3" : [ 0 ],
"d4" : [ 0 ],
"d5" : [ 0 ],
"d6" : [ 0 ],
"d7" : [ 0 ]
}
(或)
另一种方法是使用 Query Record processor
配置记录 Reader/writer 并添加新的 sql 查询,并按正确的顺序使用您的列名。
背景:
我想从
稍微改变一下我的JSON{
"d0" : 0.0,
"d1" : 0.0,
"d2" : 0.0,
"d3" : 0.0,
"d4" : 0.0,
"d5" : 0.0,
"d6" : 0.0,
"d7" : 0.0
}
至
{ "d0" : [0.0],
"d1" : [0.0],
"d2" : [0.0],
"d3" : [0.0]
"d4" : [0.0],
"d5" : [0.0],
"d6" : [0.0],
"d7" : [0.0]
}
我正在关注对此处给出的问题的答复https://community.cloudera.com/t5/Support-Questions/Groovy-Script-in-ExecuteScript-Processor-To-Format-Date/td-p/230207
据此,我用-
1.EvaluateJsonPath 2.UpdateAttribute 3.AttributesToJson
我的 Nifi 处理部分看起来像这样
related nifi flow
我对3个处理器的设置是-
1.EvaluateJsonPath
settings/ configuration for EvaluateJsonPath
2.UpdateAttribute
settings/ configuration for UpdateAttribute
3.AttributesToJson
settings/ configuration for AttributesToJson
但是 AttributesToJson 只是将平面 JSON 中数据的顺序更改为
{
"d4" : [0.0],
"d5" : [0.0],
"d6" : [0.0],
"d7" : [0.0],
"d0" : [0.0],
"d1" : [0.0],
"d2" : [0.0],
"d3" : [0.0]
}
问题:
为什么 AttributesToJson 会这样?我应该如何将其更改为从 d0 到 d7 的正确顺序? 我需要正确的顺序,因为这应该是 POST 请求的正文。
使用 JoltTransformJson
处理器以所需顺序获取 json 列并保留以下
spec:
[{
"operation": "shift",
"spec": {
"d1": "d1",
"d2": "d2",
"d3": "d3",
"d4": "d4",
"d5": "d5",
"d6": "d6",
"d7": "d7"
}
}
]
现在输出流文件将按照您期望的正确顺序排列:
{
"d1" : [ 0 ],
"d2" : [ 0 ],
"d3" : [ 0 ],
"d4" : [ 0 ],
"d5" : [ 0 ],
"d6" : [ 0 ],
"d7" : [ 0 ]
}
(或)
另一种方法是使用 Query Record processor
配置记录 Reader/writer 并添加新的 sql 查询,并按正确的顺序使用您的列名。