Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 使用ApacheNIFI将Json数组转换为csv_Arrays_Json_Apache Nifi_Jsonpath - Fatal编程技术网

Arrays 使用ApacheNIFI将Json数组转换为csv

Arrays 使用ApacheNIFI将Json数组转换为csv,arrays,json,apache-nifi,jsonpath,Arrays,Json,Apache Nifi,Jsonpath,我希望将带有数组的JSON转换为csv格式。数组中每行的元素数是动态的。我尝试使用这个流(在文章中附上了流文件xml) GetFile-->ConvertRecord-->UpdateAttribute-->PutFile 还有其他选择吗 JSON格式: { "LogData": { "Location": "APAC", "product": "w1" }, "Outcome": [ { "limit": "0", "pri": "3", "result": "pass" }

我希望将带有数组的JSON转换为csv格式。数组中每行的元素数是动态的。我尝试使用这个流(在文章中附上了流文件xml)

GetFile-->ConvertRecord-->UpdateAttribute-->PutFile

还有其他选择吗

JSON格式:

{  "LogData": {
"Location": "APAC",
"product": "w1"  },  "Outcome": [
{
  "limit": "0",
  "pri": "3",
  "result": "pass"
},
{
  "limit": "1",
  "pri": "2",
  "result": "pass"
},
{
  "limit": "5",
  "priority": "1",
  "result": "fail"
}  ],  "attr": {
"vers": "1",
"datetime": "2018-01-10 00:36:00"  }}
以csv为单位的预期输出:

location,   product,    limit,  pri,    result, vers,   datetime
APAC        w1          0       3       pass    1       2018-01-10 00:36:00
APAC        w1          1       2       pass    1       2018-01-10 00:36:00
APAC        w1          5       1       fail    1       2018-01-10 00:36:00
附加流的输出: 日志数据、结果、属性 “MapRecord[{product=w1,Location=APAC}],”[MapRecord[{limit=0,result=pass,pri=3}],MapRecord[{limit=1,result=pass,pri=2}],MapRecord[{limit=5,result=fail}],“MapRecord[{datetime=2018-01-10 00:36:00,vers=1}]”

ConvertRecord--我正在使用JSONTreereader和CSVRecordSSetwriter配置,如下所示:

JSONTreereader控制器服务配置: CSVRecordSetwriter控制器服务配置: AvroschemaRegistry控制器服务配置:

Avro模式:
{“名称”:“myschema”,“类型”:“记录”,“名称空间”:“myschema”,“字段”:[{“名称”:“日志数据”,“类型”:“{“名称”:“日志数据”,“类型”:“记录”,“字段”:[{“名称”:“位置”,“类型”:“字符串”},{“名称”:“产品”,“类型”:“字符串”}}},{“名称”:“结果”,“类型”:“数组”,“项目”:“{“名称”:“结果”;“结果”;“记录”,“类型”:“记录”,“字段”:[{“名称”:“限制”,“类型”:“字符串”},{“名称”:“优先级”,“类型”:[“字符串”,“空”]},{“名称”:“结果”,“类型”:“字符串”}}},{“名称”:“属性”,“类型”:“{“名称”:“属性”,“类型”:“记录”,“字段”:[{“名称”:“版本”,“类型”:“字符串”},{“名称”:“日期时间”,“类型”:“字符串”}}}}

如果转换为CSV不起作用,您似乎需要在转换为CSV之前执行JoltTransform。

如果转换为CSV不起作用,您似乎需要在转换为CSV之前执行JoltTransform。

请在JoltTransform Fore ConvertRecord的JoltTransform中尝试此规范:

  {
    "operation": "shift",
    "spec": {
      "Outcome": {
        "*": {
          "@(3,LogData.Location)": "[#2].location",
          "@(3,LogData.product)": "[#2].product",
          "@(3,attr.vers)": "[#2].vers",
          "@(3,attr.datetime)": "[#2].datetime",
          "*": "[#2].&"
        }
      }
    }
  }
]```

在转换记录之前,在JoltTransferMJSON中尝试此规范:

  {
    "operation": "shift",
    "spec": {
      "Outcome": {
        "*": {
          "@(3,LogData.Location)": "[#2].location",
          "@(3,LogData.product)": "[#2].product",
          "@(3,attr.vers)": "[#2].vers",
          "@(3,attr.datetime)": "[#2].datetime",
          "*": "[#2].&"
        }
      }
    }
  }
]```

非常感谢@mattyb的帮助。这就像一个符咒。一个问题:如果我在结果中有1300+个数组元素:[],将1条传入json记录转换为1300多条json记录时,jolt转换是否工作正常,或者会有任何开销?不确定您所说的开销是什么意思,但我可以告诉您,一旦所有1300多条流文件都完成了处理并提交了会话,它们将同时被传输。感谢a ton@mattyb的帮助。Thi有一个问题:如果我在结果中有1300+个数组元素:[],将1条传入json记录转换为1300多条json记录时,jolt转换是否工作正常,或者是否会有任何开销?不确定您所说的开销是什么意思,但我可以告诉您,所有1300多条流文件都将在处理完并提交会话后同时传输。