json - Nifi Attributes to JSON 改变了我的 json 数据顺序
问题描述
背景:
我想稍微改变我的 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处理的那部分看起来像这样
我对 3 个处理器的设置是 -
1.评估JsonPath
2.更新属性
3.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
配置记录读取器/写入器并以正确的顺序使用列名添加新的 sql 查询。
推荐阅读
- c - 在二叉树中逐级应用函数,参数为该级别的第一个元素
- c# - 使用 Cloud Service-Worker 角色的 Azure 云到设备直接消息
- modelsim - 有谁知道如何在 MODELSIM 中使用原理图?
- typescript - 打字稿:返回有关参数值的多种类型
- graphics - 如何读取 Vulkan 中的模板缓冲区?
- .net - .NET 中的 TLS - 第三方根 CA 未被识别为受信任的根 CA
- c# - 过滤列表并删除不需要的数据 C#
- plot - gnuplot 矩阵热图图翻转
- clojure - Clojure 空序列行为
- swift - 需要按两次取消按钮才能转到上一个视图控制器