SAP Cloud Integration Groovy脚本将JSON字符串转换为整数

2020-08-22 06:42发布

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

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


我需要将JSON文件发送给贸易伙伴。 作为此要求的一部分,需要将一个字段从字符串转换为整数。 当填充字段时,我可以正常工作,但是在大多数情况下,不会填充该字段,因此它不会存在于JSON文件中。 我试图关注此博客: http://saphcidemo.blogspot.com/2017/10/json-code-for-conversion-of-string-to.html 。 我当前遇到的问题是,当我向脚本中添加if(jsonDataObject.assignedTo!= null)语句时,我在尝试调用com.sap方法时收到错误:java.lang.NullPointerException: 从本地变量"结果"加载的空对象的.gateway.ip.core.customdev.util.Message.getBody()

这是我正在使用的脚本:

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

导入groovy.json。*

def消息processData(消息消息)

{

def jsonbody = message.getBody(java.lang.String)as String;

def jsonSlurper = new JsonSlurper();

def jsonDataObject = jsonSlurper.parseText(jsonbody);

//将JSON字符串转换为Int

//如果(jsonDataObject.check_transaction_code!= null){

jsonDataObject.check_transaction_code = convertToInt(jsonDataObject.check_transaction_code);

//整数转换

message.setBody(new JsonBuilder(jsonDataObject).toString());

返回消息;

//}

}

静态对象convertToInt(对象inputValue){

if(inputValue.isNumber()){

返回inputValue.toInteger();

}其他{

返回inputValue;

}

}

有人能告诉我我要去哪里错吗?

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

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


我需要将JSON文件发送给贸易伙伴。 作为此要求的一部分,需要将一个字段从字符串转换为整数。 当填充字段时,我可以正常工作,但是在大多数情况下,不会填充该字段,因此它不会存在于JSON文件中。 我试图关注此博客: http://saphcidemo.blogspot.com/2017/10/json-code-for-conversion-of-string-to.html 。 我当前遇到的问题是,当我向脚本中添加if(jsonDataObject.assignedTo!= null)语句时,我在尝试调用com.sap方法时收到错误:java.lang.NullPointerException: 从本地变量"结果"加载的空对象的.gateway.ip.core.customdev.util.Message.getBody()

这是我正在使用的脚本:

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

导入groovy.json。*

def消息processData(消息消息)

{

def jsonbody = message.getBody(java.lang.String)as String;

def jsonSlurper = new JsonSlurper();

def jsonDataObject = jsonSlurper.parseText(jsonbody);

//将JSON字符串转换为Int

//如果(jsonDataObject.check_transaction_code!= null){

jsonDataObject.check_transaction_code = convertToInt(jsonDataObject.check_transaction_code);

//整数转换

message.setBody(new JsonBuilder(jsonDataObject).toString());

返回消息;

//}

}

静态对象convertToInt(对象inputValue){

if(inputValue.isNumber()){

返回inputValue.toInteger();

}其他{

返回inputValue;

}

}

有人能告诉我我要去哪里错吗?

付费偷看设置
发送
7条回答
hengyuye
1楼 · 2020-08-22 07:25.采纳回答

贝弗利你好,

请找到以下可能会解决您问题的线程。

https://answers.sap.com/questions/168650/sap-hci-xml-to-json- converter-string-to-integer.html

此致

Sriprasad Shivaram Bhat

DafaDDDa
2楼-- · 2020-08-22 07:31

我不确定 。 我的问题是,如果JSON流中不包含该字段,那么我会收到异常。 我已经尝试了if语句的多种组合,但是似乎找不到正确的方法来确定该字段是否存在。

Violet凡
3楼-- · 2020-08-22 07:20

贝弗利你好,

下面 会为您工作

输入数据:

 {
     " EmployeeData":{
         "记录":[{
                 " PersonID":" P11",
                 " UserID":" 31",
                 " EmploymentID":" E221"
             },{
                 " PersonID":" P12",
                 " UserID":" 32",
                 " EmploymentID":" E222"
             },{
                 " PersonID":" P13",
                 " UserID":" 33",
                 " EmploymentID":" E223"
             }
         ]
     }
 } 

脚本:

导入com.sap.gateway.ip.core.customdev.util.Message;
 导入java.util.HashMap;
 导入groovy.json。*;

 def消息processData(消息消息){
    //身体
     def正文= message.getBody(String.class);
     def jsonSlurper =新的JsonSlurper()
     def list = jsonSlurper.parseText(body)
    
     list.EmployeeData.Record.each
    {
        it.PersonID.toString()
        如果(it.UserID!="")
        {
          it.UserID = Integer.parseInt(it.get(" UserID")。toString());
        }
        其他
        {
          it.UserID = it.UserID
        }
         it.EmployementID.toString()
     }
     def jsonOP = JsonOutput.toJson(列表)
     message.setBody(jsonOP)
    
 返回消息;
 }
 

输出数据:

 {
 " EmployeeData":{
 "记录":[{
 " PersonID":" P11",
 " UserID":31,
 " EmploymentID":" E221"
 },{
 " PersonID":" P12",
 "用户身份": "",
 " EmploymentID":" E222"
 },{
 " PersonID":" P13",
 " UserID":33,
 " EmploymentID":" E223"
 }
 ]
 }
 }
 

希望这会有所帮助!

致谢

Sriprasad Shivaram Bhat

Bunny_CDM
4楼-- · 2020-08-22 07:44

这对我有用:

导入com.sap.gateway.ip.core.customdev.util.Message;
 导入groovy.json。*
 def消息processData(消息消息)
 {
 def jsonbody = message.getBody(java.lang.String)as String;
 def jsonSlurper =新的JsonSlurper();
 def jsonDataObject = jsonSlurper.parseText(jsonbody);


//将JSON字符串转换为Int
//如果(jsonDataObject.check_transaction_code!= null){
     jsonDataObject.check_transaction_code = convertToInt(jsonDataObject.check_transaction_code);
    
    //整数转换
     message.setBody(new JsonBuilder(jsonDataObject).toString());
     返回消息;
//}
 }


    静态对象convertToInt(对象inputValue){
         if(inputValue.isNumber()){
           返回inputValue.toInteger();
         }其他{
           返回inputValue;
         }
    }
 
葫芦娃快救爷爷
5楼-- · 2020-08-22 07:25

嗨,贝弗利,

如果具有消息映射,则尝试放置条件并可以在此处进行控制。 使用现存函数并尝试实现此目的。 如果不能正常工作,请回复其他建议。

谢谢

Loganathan R

Nan4612
6楼-- · 2020-08-22 07:41

嗨,贝弗利,processData函数总是需要返回一条消息,因此您在check_transaction_code周围的方括号应该只在convert语句周围,也可以检查是否收到的消息 真正返回单个对象或对象数组,否则您的方法看起来不错。 br,苏菲。

Bunny_CDM
7楼-- · 2020-08-22 07:21

嗨,Sirprasad,

我尝试了您提供的脚本,但出现以下错误。

java.lang.NoSuchMethodException:方法groovy.json.internal.LazyMap没有签名。 适用于参数类型:

请帮忙。

此致

阿克斯(Akshay)

一周热门 更多>