用于XML到JSON转换的Groovy脚本

2020-08-21 00:07发布

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

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


专家您好,

我需要使用Groovy脚本来克服Cloud Platform Integration上标准XML to JSON转换器的缺点。

这是我需要获取的输出JSON格式:

 {
 " PO":" test21",
 "项目":[{
 " Id":" 000010",
 "产品":" XXXXX",
 "数量":5
 " Discount_Percent":0,
 "单价":0,
 "药品":错误,
 }]
 } 

但这是我从转换器中收到的:

 {
 " PO":" test21",
 "项目":[{
 " Id":" 000010",
 "产品":" XXXXX",
 "数量":" 5.000",
 " Discount_Percent":" 0.000",
 "单价": "",
 " Pharmaceutical":" false",
 }]
 } 

我不是Groovy专家,并尝试使用SAP注释中提供的内容使用以下groovy将" false"替换为false,但这没用:

导入com.sap.gateway.ip.core.customdev.util.Message;

 def消息processData(消息消息){
 def body = message.getBody(java.lang.String)as String;
 字符串输出= body.replaceAll(" \" false \""," \ $ 1");
 message.setBody(output);
 返回消息;
 }
 

有人可以帮我使用适用于我的常规脚本吗?

感谢您的时间。

阿尼班

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

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


专家您好,

我需要使用Groovy脚本来克服Cloud Platform Integration上标准XML to JSON转换器的缺点。

这是我需要获取的输出JSON格式:

 {
 " PO":" test21",
 "项目":[{
 " Id":" 000010",
 "产品":" XXXXX",
 "数量":5
 " Discount_Percent":0,
 "单价":0,
 "药品":错误,
 }]
 } 

但这是我从转换器中收到的:

 {
 " PO":" test21",
 "项目":[{
 " Id":" 000010",
 "产品":" XXXXX",
 "数量":" 5.000",
 " Discount_Percent":" 0.000",
 "单价": "",
 " Pharmaceutical":" false",
 }]
 } 

我不是Groovy专家,并尝试使用SAP注释中提供的内容使用以下groovy将" false"替换为false,但这没用:

导入com.sap.gateway.ip.core.customdev.util.Message;

 def消息processData(消息消息){
 def body = message.getBody(java.lang.String)as String;
 字符串输出= body.replaceAll(" \" false \""," \ $ 1");
 message.setBody(output);
 返回消息;
 }
 

有人可以帮我使用适用于我的常规脚本吗?

感谢您的时间。

阿尼班

付费偷看设置
发送
6条回答
当学会了学习
1楼 · 2020-08-21 01:04.采纳回答

嗨Anirban

这是一个Groovy脚本,用于清理JSON。 这样做无需使用正则表达式,并且仅更新需要更新的值。

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

 def消息processData(消息消息){

     def json = message.getBody(java.lang.String)
     def jsonSlurper =新的JsonSlurper()
     def对象= jsonSlurper.parseText(json)

     object.Items.each {项目->
        //将Pharmaceutical转换为布尔值
         item.Pharmaceutical =(item.Pharmaceutical =='false'?false:true)
        //将数量转换为整数
         item.Quantity = item.Quantity.toDouble()。intValue()
        //将Discount_Percent转换为整数
         item.Discount_Percent = item.Discount_Percent.toDouble()。intValue()
        //如果Unit_Price为空,则替换为零,否则转换为double
         如果(item.Unit_Price ==''){
             item.Unit_Price = 0
         }其他{
             item.Unit_Price = item.Unit_Price.toDouble()
         }
     }

     message.setBody(JsonOutput.toJson(object))
     返回讯息

 } 

将脚本添加到"脚本"步骤时,请在"脚本功能"字段中输入 not 。 该字段具有特定目的,没有描述脚本的作用。

给出您的输入,它将产生以下输出:

此致

Morten

N-Moskvin
2楼-- · 2020-08-21 00:46

Hi Anirban

此转换的工作方式无效 完全清楚。 可能Unit_Price包含一个价格,还是它总是空的,应该用零代替? 数量和Discount_Percent是否可以保留小数? 还是要舍弃小数点分隔符之后的所有内容?

此致

Morten

蓋茨
3楼-- · 2020-08-21 01:07

HI,

请检查 您的正则表达式,并按如下所示进行更改:-

字符串输出= body.replaceAll(" \"(false)\""," \ $ 1"); 

"()" =>将多个标记分组在一起,并创建用于提取子字符串的捕获组。

我尝试了相同的操作,但是没有出现任何错误。

输入:-

输出:


正如 Morten Wittrock 所共享的那样,这是将给定字符串强制转换为 各自的类型。

致谢,
Bibhu

灬番茄
4楼-- · 2020-08-21 00:48

您好,Morten,

Unit_Price将具有一个十进制值,而Discount_Percent和Quantity是整数。 抱歉造成混乱。

此致

Anirban

5楼-- · 2020-08-21 00:45

Anirban Mallick

看 代码的工作原理,并从那里即兴创作。 您可以使用object.PO来获取PO键。

现在,您真的需要自己尝试和学习。 提示,伙计。

致谢,

莫尔滕

软件心理学工程师
6楼-- · 2020-08-21 01:05

谢谢,比布-您的答案是有效的,而且有效 对我删除了Morten建议的"抄写功能"后,对我来说还是很遗憾,但是我不能接受2个答案。

再次感谢您的时间和支持。

此致

Anirban

一周热门 更多>