[英]DataWeave Transformation in Mule
我将以下设置作为我的输入负载,并且我希望输出为结构良好的 XML 文件,如下所示:我无法控制输入负载。 我是 Mule DataWeave Transformations 和 Mule 的新手。 请注意,这些只是所有名称和属性的任意值。 到目前为止我尝试过的是使用Mule提供的pluck()和map()方法,但没有成功。 任何指向正确方向的指针将不胜感激。
输入:
[{head={vars=[subject, instructorCode, instructoreName]}, results={bindings=[{subject={type=uri, value=www.google.com/subject-1-Details}, instructorName={type=literal, value=John Smith}, instructorCode={type=literal, value=JOS}}, {subject={type=uri, value=www.google.com/subject-2-Details}, instructorName{type=literal, value=Jane Smith}, instructorCode={type=literal, value=JAS}}]}},{head={vars=[department, departmentCode, departmentName]}, results={bindings=[{department={type=uri, value=www.google.com/department-1-details}, departmentName={type=literal, value=Computer Science}, departmentCode={type=literal, value=CS}},{department=(type=uri, value=www.google.com/department-2-details}, departmentName={type=literal, value = English}, departmentCode={type=literal, value=EL}}]}}]
输出:
<?xml version="1.0" encoding="UTF-8"?> <CustomMessage xmlns="knowledge.publish.google.com"> <CustomKLMessage> <CustomMessageHeader> <msgId>12353</msgId> <requestDateTime<2019-12-20T16:04:19.099-05:00</requestDateTime> <requestorID>XYZ123</requestorID> <locale>en_US</locale> </CustomMessageHeader> <elements> <element> <name>subject</name> <values> <value>JOS||John Smith</value> <value>JAS||Jane Smith</value> <value>NIP||Nilay Patel</value> </values> </element> <element> <name>department</name> <values> <value>CS||Computer Science</value> <value>EL||English Language</value> </values> </element> </elements> </CustomKLMessage> </CustomMessage>
JSON 无效,请发布正确的 JSON。
如果此错误来自源头,您可能需要进行一些 python pandas 数据整理以使其成为正确的格式。 祝你好运。
输入文件绝对不是 JSON(它没有引号,它使用等号而不是冒号)而且我还怀疑它有拼写错误(例如“instructorName{type”没有等号,括号而不是花括号和单词“instructoreName”) )
保存它,假设您需要按原样解析它,然后转换为 XML。 为此,您可以使用以下脚本(更改错别字后):
%dw 2.0
output application/xml
// Convert to JSON which is the most similar format
var jsonText =
(
// replace equals with colons
(payload replace "=" with ":")
// remove spaces between special chars
replace /([\[\]\{\},:]+)\s+([\[\]\{\},:]+)/
with (mat,index) -> mat[1] ++ mat[2]
)
// wrap values with quotes
replace /([^\[\]\{\},\=:]+)/
with (mat,index) -> "\"" ++ trim(mat[1]) ++ "\""
// Parse it as JSON
var json = read(jsonText,"application/json")
ns ns0 knowledge.publish.google.com
---
{ ns0#CustomMessage: {
ns0#CustomKLMessage: {
ns0#CustomMessageHeader: {
ns0#msgId: "12353",
ns0#requestDateTime: "2019-12-20T16:04:19.099-05:00",
ns0#requestorID: "XYZ123",
ns0#locale: "en_US"
},
ns0#elements: {(json map (item,idx) -> {
ns0#element: {
ns0#name: item.head.vars[0],
ns0#values: {( item.results.bindings map (bind,idx2) -> {
ns0#value: bind[(item.head.vars[1])].value ++ "||" ++ (bind[(item.head.vars[2])].value)
})}
}})
}
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.