【问题标题】:Nifi Attributes to JSON alters my json data orderNifi Attributes to JSON 改变了我的 json 数据顺序
【发布时间】:2019-10-22 22:10:59
【问题描述】:

背景:

我想稍微改变一下我的 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.更新属性 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 请求的主体。

【问题讨论】:

    标签: json attributes streaming iot apache-nifi


    【解决方案1】:

    使用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 配置 Record Reader/writer 并以正确的顺序使用列名添加新的 sql 查询。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-13
    • 2017-08-04
    • 1970-01-01
    • 1970-01-01
    • 2016-11-12
    相关资源
    最近更新 更多