json 如何使用QueryRecord处理数组?

wwwo4jvm  于 2023-03-09  发布在  其他
关注(0)|答案(2)|浏览(84)

我在Apache NiFi工作,我有一个问题:如何使用QueryRecord处理器处理JSON中的嵌套数组?例如,我有一个JSON:

{
   "offerName":"Viatti Strada Asimmetrico V-130 205/55 R16 91V",
   "detailedStats":[
      {
         "type":"mobile",
         "clicks":4,
         "spending":"2.95"
      }
   ]
}

如何提取数组以获得以下结果:

{
  "offerName": "Viatti Strada Asimmetrico V-130 205/55 R16 91V",
  "type": "mobile",
  "clicks": 4,
  "spending": "2.95"
}

I read about RPATH,但没有找到好的示例。
尝试使用:

SELECT RPATH(detailedStats, '/detailedStats[1]')
  FROM flowfile

但它抛出错误。我如何才能得到预期的结果与RPATH

ru9i0ody

ru9i0ody1#

你可以通过QueryRecord选择下面这样的模式。但是你在写的时候遇到了一个问题。我使用了JsonRecordSetWriterInherent Record Schema。如果你喜欢avro模式,this是一个很好的教程

SELECT offerName,
       RPATH_STRING(detailedStats, '/type') type,
       RPATH_INT(detailedStats, '/clicks') clicks,
       RPATH_STRING(detailedStats, '/spending') spending
  FROM FLOWFILE

result是一个数组,因此您应该在下游使用$.*拆分它

bgibtngc

bgibtngc2#

另一种方法可能是使用以下代码添加具有(shifttype)规范的JoltTransformJSON处理器,可以从Settings选项卡的Advanced按钮访问该规范

[
  {
    "operation": "shift",
    "spec": {
      "detailedStats": {
        "*": {
          "@(2,offerName)": "offerName",
          "*": "&"          
        }
      }
    }
  }
]

以便提取您想要的结果。

相关问题