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

2020-08-21 04:39发布

         点击此处--->   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脚本处理多级元素?

         点击此处--->   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条回答
追夢秋陽
1楼 · 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

落灬小鱼
2楼-- · 2020-08-21 05:10

我很抱歉。 我上传了错误的XML。

 <?xml version =" 1.0" encoding =" UTF-8"?>
 <根>
   
     
     
     
        0003023291 
       <名称> DairyOne 
     
   
   
     <元素>
        002192817791 
       
         <元素>
           <分类>
             <代码>
               牛奶
             
             官方
           
           <扩展名>
              50 
             
                37 
             
             <名称>温度
           
            002192817791 
            2020-02-02T00:00:00-06; 00 
           
             <元素>
               抑制剂
               <名称>抑制剂
               <值集>
                 <值>否
               
             
             <元素>
                Coli 
               <名称> Coli 
               <值集>
                 
               
             
             <元素>
                lpc 
               <名称> lpc 
               <值集>
                 
               
             
             <元素>
                pi 
               <名称> pi 
               <值集>
                 
               
             
             <元素>
                standardPlateCount 
                standardPlateCount 
               <值集>
                 
               
             
           
           
             <元素>
                BF 
               <名称>黄油脂肪
               
                  4.54 
                  EQ 
                 毫米HG 
               
             
             <元素>
               蛋白质
               <名称>蛋白质
               
                  3.42 
                  EQ 
                 毫米汞柱
               
             
             <元素>
                FP 
               <名称> freezePoint 
               
                  0.541 
                  EQ 
                 毫米汞柱
               
             
             <元素>
               乳糖
               <名称>乳糖
               
                  4.40 
                  EQ 
                  mm Hq 
               
             
             <元素>
                mun 
                mun 
               
                  7.5 
                  EQ 
                 毫米汞柱
               
             
             <元素>
                otherSolids 
               <名称> otherSolids 
               
                  5.54 
                  EQ 
                 毫米汞柱
               
             
             <元素>
               序列
               <名称>序列
               
                  7791 
                  EQ 
                 毫米汞柱
               
             
             <元素>
                solidsNonfat <​​/ID>
                solidsNonfat <​​/Name>
               
                  8.96 
                  EQ 
                 毫米汞柱
               
             
             <元素>
                somaticCellCount 
                somaticCellCount 
               
                  500 
                  EQ 
                 毫米汞柱
               
             
           
         
       
     
   
 
 
bbpeas
3楼-- · 2020-08-21 05:21

尊敬的

您的其他XML到JSON的问题,则可以根据输入自动生成输出。 这里情况不同! 输出包含比输入更多的信息,所以您将永远无法使用内置工具来做到这一点。

您在这里需要做的是编写一个Groovy脚本,该脚本基于JSON对象生成 输入有效负载的XML内容。 您可以使用我在上一个答案中使用的XmlSlurper和JsonOutput类,但是代码的逻辑将更加针对此问题。 让其中一个工作,然后移至下一个。 最后,您可以清理它,删除重复的代码,等等。如果您遇到特定代码段的问题,请随时在此处发布有关它的问题。

祝您好运,玩得开心!

关于,

Morten

大简至美
4楼-- · 2020-08-21 04:57

那太好了。 由于您的问题已解决,因此,如果您愿意接受我的答复,将不胜感激。

致谢

Morten

蓋茨
5楼-- · 2020-08-21 05:03

谢谢! 这很正常。

一周热门 更多>