我有一个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
})
答案 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]
}
)