在dataweave中读取JSON Payload作为CSV文件的一部分

时间:2019-06-05 21:50:48

标签: json csv mule anypoint-studio dataweave

我有一个Web服务,该服务导出一个CSV文件,该文件具有列之一作为JSON负载。在执行Web服务之后,我将值存储在本地变量中以进行转换。每次当我从该列中读取值时,都会丢失这些值,并且仅返回“}”。不知道为什么会这样。我想按原样保留JSON有效负载,并在进行一些处理后保留到文件中。请指教

我正在使用下面的代码来获取属性列的值,并且它始终返回“}”。其余内容将被忽略

public class UserArea
{
    public int Id { get; set; }
    public string Name { get; set; }
}

我期望属性列中的完整JSON有效负载将被返回,事实并非如此。我在这里注意到的一件事是输入中的JSON有效负载中没有转义字符。但是我对此也没有任何控制权。在这种情况下,如何从属性列中提取信息


由于我无法共享整个项目,因此创建了一个示例项目,并将@machaval的输入与带有接收csv文件的http对象一起使用。将模仿类型标记为text / csv并发送有效载荷

CSV Fragment
-------------
 id,name,attributes
 1,name1,{"Choice Number":"0","Campaign Run Id":"234"}
 2,name2,{"Choice Number":"1","Campaign Run Id":"235"}
 3,name3,{"Choice Number":"2","Campaign Run Id":"236"}
 4,name4,{"Choice Number":"3","Campaign Run Id":"236"}


Code
----
 %dw 1.0
 %output application/java
 ---
 flowVars.activityData map ((actData) -> {
      "playerId": actData.id,
      "name": actData.name,
      "attributes": actData.attributes
  })

1 个答案:

答案 0 :(得分:0)

嗨,拉杰耶夫,您的数据存在的问题是,它不是CSV,因此需要以某种方式转义json。因此,我解决问题的方法是将您的输入作为字符串处理(可以很容易地通过使用对象将字符串字符串mp来完成),然后手动对其进行解析。我的假设是您的格式没有更多花样。

%dw 1.0
output application/json  
---
//First remove the header
(payload splitBy "\n")[1 to -1] 
    map ((item, index) -> using(commas = item find ",")             
        {
            id: item[0 to commas[0] - 1],
            name: item[commas[0] + 1 to commas[1] - 1],
            attributes: item[commas[1] + 1 to -1]
        }
    )