我将以下内容设置为输入有效负载,并且我希望将其输出为结构良好的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>
答案 0 :(得分:0)
JSON无效,请发布正确的JSON。
如果此错误是由源引起的,则可能需要对python pandas数据进行一些整理才能使其正确格式。祝你好运。
答案 1 :(得分:0)
输入文件绝对不是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)
})}
}})
}
}
}
}