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参数是这种对象里面包含数组时,我们定义接收结构时也要对照参照。

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

推荐文章

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。