JSON的Nifi属性改变了我的json数据顺序

时间:2019-10-22 22:10:59

标签: json attributes streaming iot apache-nifi

背景:

我想从稍微更改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请求的正文。

1 个答案:

答案 0 :(得分:0)

使用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查询。

相关问题