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参数是这种对象里面包含数组时,我们定义接收结构时也要对照参照。
我这里举得例子比较简单,真实需求里可能存在多层嵌套。