当前位置: 首页 > 知识库问答 >
问题:

用mule读取文件并用dataweave解析

慕容超
2023-03-14

我正在使用Mule 4.4,并尝试读取文件,然后使用Dataweave转换为JSON。这是文件(它没有标头),文件中的最后一行为空白

abc|Milk|3.9|
lmn|Butter|5.5|
xyz|Bread|1.6|

在读取文件时,将mime类型设置为application/csv(尽管其管道分隔),这会是一个问题吗?

我遇到的问题是,我想将文件内容转换为json,如下所示:

[
 {
   "id": "abc",
   "product": "Milk",
   "price": 3.9
 },
{
"id": "lmn",
   "product": "Butter",
   "price": 5.5
 },
etc

]

然而,它显示如下:(重复第一行)

[
 {
   "id": {
     "abc|Milk|3.9|": "lmn|Butter|5.5|"
    }
 },
{
"id": {
  "abc|Milk|3.9|": "xyz|Bread|1.6|"
}
}
]

我认为这种情况正在发生,因为骡子假设第一行包含标题.这是我的数据编织:

%dw 2.0
output application/json

---

payload map (value,index)->
{
   id:value
}

共有2个答案

冯卜鹰
2023-03-14

请尝试以下方法。

%dw 2.0
input payload application/csv separator="|", header = false
output application/json
---
payload map (value,index)->
{
    id:value[0],
    product: value[1],
    price: value[2]
}
浦德义
2023-03-14

它以这种方式显示是因为您将其设置为将第一行视为标题行。您需要将阅读器的标题值设置为false,以便它理解第一行实际上不是标题。

除此之外,还需要将分隔符设置为管道字符。

例如,如果您将其作为文本读取并纯粹使用dataweave对其进行处理,它将如下所示:

%dw 2.0
output application/json
---
read(payload, "applicatin/csv", {"header": false, "separator": "|" }) map (
    {
        id: $[0],
        product: $[1],
        price: $[2]
    }
)
 类似资料:
  • 我从不同的来源获得不同长度的CSV文件。CSV 中的列是不同的,唯一的例外是每个 CSV 文件将始终有一个 Id 列,可用于绑定不同 CSV 文件中的记录。一次需要处理两个这样的 CSV 文件。该过程是从第一个文件中获取 Id 列并匹配第二个 CSV 文件中的行,并创建包含第一个和第二个文件中内容的第三个文件。id 列可以在第一个文件中重复。例如,下面给出。请注意,第一个文件可能有 18 到 19

  • 我有一个这样的 CSV: 我使用spliter逐行处理记录,然后在dataweave中使用splitBy“,”将记录转换为地图。但我如何才能为“;”做另一个层次的拆分呢?SplitBy不允许多个分隔符,数据编织中的CSV类型也不允许。 最终,我想要一个这样的JSON: 有什么想法吗?

  • 我正在数据编织中查找 < code>lookup("myflow ",$) 我正在将整个 xml 传递给调用的流。流中接收的数据类型为“java.util.LinkedHashMap”。我正在尝试放置一个 ForEach 处理器并在集合中指定 xpath3。此获取错误,并显示消息: 根异常堆栈跟踪:java.lang.IllegalArgument异常:无法将类型为“java.util.Linke

  • 我有CSV,下面有空白行和额外的牧人,如下所示: 我想读取productID的值 这是我在dataweave中编写的代码: 将有效载荷返回为: 这里有什么建议吗?我们可以使用Groovy/MEL/regex表达式吗?如何在Dataweave中使用行忽略? 我们可以使用Groovy/regex跳过前两行吗? 我正面临着下面的groovy的性能问题。Mule花了太多时间来转换甚至1MB的文件。对此还有

  • 我有以下要求。 输入为 我需要将上面的json数组转换为以下输出格式: