首页 前端知识 ABAP与JSON格式互转(序列化与反序列化)类方法(/ui2/cl_json)的参数详解

ABAP与JSON格式互转(序列化与反序列化)类方法(/ui2/cl_json)的参数详解

2024-05-20 15:05:18 前端知识 前端哥 125 264 我要收藏

1,序列化(ABAP TO JSON) /ui2/cl_json=>serialize

/ui2/cl_json=>serialize( EXPORTING data = lt_ekko         "序列化数据
                                   compress =  ''         "是否跳过空元素
                                   numc_as_string   = ''   "数量转换成字符
                                   pretty_name  = 'L'     "详细用法在下方描述
                                   name_mappings    = lt_name_mappings "详细使用在下面描述
                         RECEIVING r_json = lv_string    "返回JSON字符   ).

参数1:COMPRESS(是否跳过空元素) ↓

  • 数据示例: ↓

  • 不跳过空元素: compress =  ' ' ↓

  • 跳过空元素: compress =  ' X ' ↓

参数2:numc_as_string( NUMC TO STRING )

  • 数据示例 ↓

  • numc_as_string   =  ' ' ↓

  • numc_as_string   =  ' X ' ↓

参数3:pretty_name(序列化字段属性 大写/小写/驼峰)

  • 数据示例 ↓

  • 转大写:pretty_name  =  ' ' PS:由于SAP默认是大写,也可不传输此参数

  • 转小写:pretty_name  =  ' L '

  • 转驼峰命名:pretty_name  =  ' X '

    PS:如果我们需要转换驼峰命名,在SAP定义我们字段的时候要做一些处理;需要在我们想要大写的字母前加上下划线 '_' ,例如我们想将字符ZHANGYAO转换成ZhangYao时,在SAP我们需要将字段名定义为_zhang_yao。然后将pretty_name参数设置为  ' X ' 。

参数4:name_mappings( ABAP&JSON字段MAPPING )

当SAP字段与外围系统字段命名方式相差太多,或者你任性不想使用PRETTY_NAME参数的时候,还有没有另外一种方法能够帮助我们实现字段匹配呢?答案是当然有。具体如何使用呢?

  • 1,首先定义一个mapping结构,字段包括abap和json。PS:内表需要是哈希表而且需要指定主键 ( abap)
SELECT ebeln,ebelp FROM ekpo INTO TABLE @DATA(lt_ekko) UP TO 1 ROWS .
ls_mapping-abap = 'Ebeln'.
ls_mapping-json = 'ZHang张123'.
INSERT ls_mapping INTO TABLE lt_mappings.
CLEAR:ls_mapping.
ls_mapping-abap = 'ebelp'.
ls_mapping-json = 'Yao耀123'.
INSERT ls_mapping INTO TABLE lt_mappings.
  • 2,然后将SAP字段名和外围系统字段名INSERT到MAPPING内表 PS:已经测试过,ABAP字段大小写不影响字段MAPPING,但是JSON字段需要根据外围系统字段命名区分好大小写,也有可能包含文本,数字等等。

SELECT ebeln,ebelp FROM ekpo INTO TABLE @DATA(lt_ekko) UP TO 1 ROWS . ls_mapping-abap = 'Ebeln'. ls_mapping-json = 'ZHang张123'. INSERT ls_mapping INTO TABLE lt_mappings. CLEAR:ls_mapping. ls_mapping-abap = 'ebelp'. ls_mapping-json = 'Yao耀123'. INSERT ls_mapping INTO TABLE lt_mappings.

  • 示例数据↓

  • 传入MAPPING内表

  • 转化后的JSON字符效果如下↓

以上就是序列化比较常用的四种参数,其他的暂时没有了解过。

2,反序列化(JSON TO ABAP)/ui2/cl_json=>deserialize

/ui2/cl_json=>deserialize( EXPORTING json        = gv_odata
                                     pretty_name = 'X'
                                     name_mappings = lt_mappings
                           CHANGING  data        = gs_odata ).

反序列化的时候,其实不需要太多操作,因为SAP是不区分大小写的,所以只要根据JSON字段命名创建好我们的SAP接收结构即可。反序列化的NAME_MAPPING使用可以参照上面的使用。将SAP字段和外围系统字段反过来即可。

但是有一个点,需要注意一下,JSON传过来的数据是对象嵌套数组的时候,我们SAP定义接收结构需要有点小小的不同,下面举一个比较简单的例子。

如果我们接收到的JSON参数是这种对象里面包含数组时,我们定义接收结构时也要对照参照。

我这里举得例子比较简单,真实需求里可能存在多层嵌套。

转载请注明出处或者链接地址:https://www.qianduange.cn//article/9004.html
评论
发布的文章

JQuery中的load()、$

2024-05-10 08:05:15

大家推荐的文章
会员中心 联系我 留言建议 回顶部
复制成功!