SAP Cloud Platform集成–具有多个级别元素的XML到JSON转换

2020-08-21 04:39发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)我有一个IFLOW,在将数据发送...

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


我有一个IFLOW,在将数据发送到外部方之前,我需要执行XML到JSON的转换。 XML包含多个"元素"级别。

转换前的XML:

 <?xml version ='1.0'encoding ='UTF-8'?>
 <根>
   
      2020-02-02 
     
     
     
     
     
     
     
     
     <重量>
     
      4.54 
      3.42 
     <乳糖> 4.40 
      8.96 
      5.54 
      13.5 
      500 
     <氮气> 7.5 
      17 
      66 
      90 
      1 
      0.541 
     <温度> 37 
     <抑制剂> NF 
      99 
     <沉积物>
     
      002192817791 
   
 
 

结果应如下所示:

 {
 " TestResultsHeader":{
 " InspectionParty":{
 " ID":" 0003023291",
 "名称":" DairyOne"
 },
 " InspectionOrderID":[]
 },
 " TestResultsLine":[{
 " ParentSampleID":" 100065123",
 " TestResultsDetail":[{
 " SampleID":"",
 "分类":{
 "代码":{
 "代码":"牛奶"
 },
 "描述":"官方"
 },
 " TestDateTime":" 2018-03-28T09:32:10-06:00",
 "延期": {
 "代码":" 50",
 "名称":"温度",
 "措施":{
 " @unitCode":" F",
 "值":" 38"
 }
 },
 " TestQuantitativeMeasurement":[{
 " ID":" BF",
 "名称":"黄油",
 " ValueRange":{
 " FirstValue":" 3.79",
 " OperatorCode":" EQ",
 " UOMCode":" mm Hg"
 }
 },
 {
 " ID":" FP",
 "名称":" freezePoint",
 " ValueRange":{
 " FirstValue":" 0.558",
 " OperatorCode":" EQ",
 " UOMCode":" mm Hg"
 }
 },
 {
 " ID":"乳糖",
 "名称":"乳糖",
 " ValueRange":{
 " FirstValue":" 4.66",
 " OperatorCode":" EQ",
 " UOMCode":" mm Hg"
 }
 },
 {
 " ID":" mun",
 "名称":" mun",
 " ValueRange":{
 " FirstValue":" 11.3",
 " OperatorCode":" EQ",
 " UOMCode":" mm Hg"
 }
 },
 {
 " ID":" otherSolids",
 "名称":" otherSolids",
 " ValueRange":{
 " FirstValue":" 5.72",
 " OperatorCode":" EQ",
 " UOMCode":" mm Hg"
 }
 },
 {
 " ID":"蛋白质",
 "名称":"蛋白质",
 " ValueRange":{
 " FirstValue":" 3.08",
 " OperatorCode":" EQ",
 " UOMCode":" mm Hg"
 }
 },
 {
 " ID":"序列",
 " Name":" sequence",
 " ValueRange":{
 " FirstValue":" 800",
 " OperatorCode":" EQ",
 " UOMCode":" mm Hg"
 }
 },
 {
 " ID":" solidsNonfat",
 "名称":" solidsNonfat",
 " ValueRange":{
 " FirstValue":" 8.80",
 " OperatorCode":" EQ",
 " UOMCode":" mm Hg"
 }
 },
 {
 " ID":" somaticCellCount",
 "名称":" somaticCellCount",
 " ValueRange":{
 " FirstValue":" 140",
 " OperatorCode":" EQ",
 " UOMCode":" mm Hg"
 }
 },
 {
 " ID":"重量",
 "名称":"重量",
 " ValueRange":{
 " FirstValue":" 92660",
 " OperatorCode":" EQ",
 " UOMCode":" mm Hg"
 }
 }
 ],
 " TestQualitativeMeasurement":[{
 " ID":" coli",
 " Name":" coli",
 " ValueSet":{
 "值":"是"
 }
 },
 {
 " ID":"抑制剂",
 "名称":"抑制剂",
 " ValueSet":{
 "值":"是"
 }
 },
 {
 " ID":" lpc",
 "名称":" lpc",
 " ValueSet":{
 "值":"是"
 }
 },
 {
 " ID":" pi",
 "名称":" pi",
 " ValueSet":{
 "值":"是"
 }
 },
 {
 " ID":"沉积物",
 "名称":"沉淀",
 " ValueSet":{
 "值":"是"
 }
 },
 {
 " ID":" standardPlateCount",
 "名称":" standardPlateCount",
 " ValueSet":{
 "值":"是"
 }
 }
 ]
 }]
 }
 ]
 }
 

使用XML到JSON转换器会将" element"字段标记保留在结果中。 有没有办法用Groovy脚本处理多级元素?

5条回答
追夢秋陽
2020-08-21 05:09 .采纳回答

再次打招呼

为此,您可以使用内置转换器将XML转换为JSON,然后使用Groovy脚本清理JSON。

在脚本中,使用JsonSlurper读取JSON并创建一个要操作的对象。 然后进行必要的更改,并使用JsonOutput来写回JSON。

我将向您展示一个示例,然后您可以-应该! -其余部分自己编写。

仅使用内置转换器,将TestResultsLine和TestResultsDetail转换为:

您要删除"元素"属性,并将它们包含的单个对象添加到数组中。 以下是一个脚本可以完全做到这一点:

导入com.sap.gateway.ip.core.customdev.util.Message
 导入groovy.json.JsonSlurper
 导入groovy.json.JsonOutput

 def消息processData(消息消息){
    //解析JSON有效负载
     def jsonSlurper =新的JsonSlurper()
     def obj = jsonSlurper.parseText(message.getBody(java.lang.String))
    
    //修复TestResultsDetail
     obj.TestResultsLine.element.TestResultsDetail = [obj.TestResultsLine.element.TestResultsDetail.element]

    //修复TestResultsLine
     obj.TestResultsLine = [obj.TestResultsLine.element]
    
    //创建JSON输出并返回
     message.setBody(JsonOutput.toJson(obj))
     返回讯息
 } 

现在JSON输出与您要查找的内容匹配:

对其余的差异应用相同的方法,就可以了。

开心,

Morten

一周热门 更多>