【问题标题】:CSV TO JSON using dataweave使用数据编织的 CSV 到 JSON
【发布时间】:2016-09-10 21:13:38
【问题描述】:

请参考此 dataweave 窗口图片:- dataweave window image

我正在尝试使用 dataweave 将 CSV 转换为 JSON,但即使是最简单的转换,它也会自动创建一个空标记。我可以在预览窗口中看到。当我运行此应用程序时,我收到此错误 *

异常堆栈是: 1. 452 (java.lang.ArrayIndexOutOfBoundsException) com.mulesoft.weave.reader.CharArraySourceReader:21 (null) 2. 452 (java.lang.ArrayIndexOutOfBoundsException)。消息负载的类型为:WeaveMessageProcessor$WeaveOutputHandler (org.mule.api.MessagingException)
org.mule.execution.ExceptionToMessagingExceptionExecutionInterceptor:32

**************************************************** ************************************ 根异常堆栈跟踪:java.lang.ArrayIndexOutOfBoundsException: 452 在 com.mulesoft.weave.reader.CharArraySourceReader.lookAheadAscii(CharArraySourceReader.scala:21) 在 com.mulesoft.weave.reader.csv.parser.CSVParser.parse(CSVParser.scala:132) 在 com.mulesoft.weave.reader.csv.parser.CSVParser.elementAt(CSVParser.scala:61) 在 com.mulesoft.weave.reader.csv.parser.CSVParser.contains(CSVParser.scala:38) 在 com.mulesoft.weave.reader.csv.CSVRecordsValue$$anon$1.hasNext(CSVReader.scala:58) 在 scala.collection.Iterator$class.toStream(Iterator.scala:1188) 在 com.mulesoft.weave.reader.csv.CSVRecordsValue$$anon$1.toStream(CSVReader.scala:56)

这是我正在使用的示例 csv

SpreadsheetKeyEmployee,Position,EffectiveDate,BonusPlan,Amount,Currency,IgnorePlanAssignment
1,18211,2016-05-01,BONUS_PLAN1,150,USD
2,18212,2016-05-01,BONUS_PLAN2,150,USD
3,18213,2016-05-01,BONUS_PLAN3,150,USD
4,18214,2016-05-01,BONUS_PLAN4,150,USD

我认为我可能在阅读器配置(对于 csv)方面犯了一些错误,论坛中讨论了类似的问题,但这对 https://forums.mulesoft.com/questions/36378/dataweave-example-of-csv-to-json.html

没有帮助

【问题讨论】:

  • 需要查看您的配置,连接可能很简单。

标签: mule mule-studio anypoint-studio dataweave


【解决方案1】:

我已尝试重新创建您的场景但无法复制它,这是我使用的 dataweave 配置,它可以工作。

<dw:transform-message metadata:id="e4e1b720-5d25-4b36-8406-cf7d6bfc7d6a" doc:name="CSV to JSON">
        <dw:set-payload><![CDATA[%dw 1.0
         %output application/json
         ---
         payload map ((payload01 , indexOfPayload01) -> {
              SpreadsheetKeyEmployee: payload01.SpreadsheetKeyEmployee as :number,
         Position: payload01.Position,
         EffectiveDate: payload01.EffectiveDate,
         BonusPlan: payload01.BonusPlan,
         Amount: payload01.Amount,
         Currency: payload01.Currency,
        IgnorePlanAssignment: payload01.IgnorePlanAssignment
        })]]></dw:set-payload>
  </dw:transform-message>

【讨论】:

    【解决方案2】:

    可能是 dataweave 无法正确处理窗口行结尾的情况。你可以尝试用\n替换windows换行符吗,如下:

    #[payload.replace("\r\n", "\n")]
    

    您可以将上述 MEL 表达式放在 dataweave 之前的 set-payload 中。

    【讨论】:

    • 它会抛出一个错误......**异常堆栈是:1. [错误:无法解析方法:java.lang.String.get(java.lang.String) [arglength=1 ]] [Near : {... payload.get('contents') ....}]**
    • 我已经修改了表达式以直接使用有效负载。这个想法是替换你的payload中的所有\r\n,所以你需要根据你的用例修改MEL表达式。
    【解决方案3】:

    您需要解析 csv 文件并将其映射到 dataweave 组件中的 JSON 对象。 检查下面的链接

    https://dzone.com/articles/csv-xml-json-in-mulesoft

    【讨论】:

    • 虽然这在理论上可以回答这个问题,it would be preferable 在此处包含答案的基本部分,并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能会失效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-11
    • 2021-12-22
    • 1970-01-01
    相关资源
    最近更新 更多