abap josn转换

导语:abap和josn转换,在abap中有两种方式,但是第二种转换出来的josn格式字段名没有双引号,我放到网页上也不能识别,所以不知道是干嘛的,但是也贴出来分享一下。

方案一:/ui2/cl_json
测试代码如下,可以直接放到自己的测试程序中,进行测试,通过测试结果可以看到,对于字段名,sap这里是不区分大小写的,字段名输出之后都是小写的,如果接收方有需求,在传出之前用REPLACE语法进行替换一下。

DATA : gt_table TYPE TABLE OF makt.
DATA : gw_table TYPE makt.

CLEAR gw_table.
gw_table-mandt = '200'.
gw_table-matnr = '1001'.
gw_table-spras = '1'.
gw_table-maktx = '测试1'.
gw_table-maktg = 'JOSN测试1'.
APPEND gw_table TO gt_table.

CLEAR gw_table.
gw_table-mandt = '200'.
gw_table-matnr = '1002'.
gw_table-spras = '1'.
gw_table-maktx = '测试2'.
gw_table-maktg = 'JOSN测试2'.
APPEND gw_table TO gt_table.

*-->abap转json
gv_json = /ui2/cl_json=>serialize( data = gt_table compress = abap_false pretty_name = /ui2/cl_json=>pretty_mode-camel_case ).
WRITE gv_json.


*-->josn转abap
CLEAR :gv_json,gt_table.
gv_json = '[{"mandt":"200","matnr":"1001","spras":"1","maktx":"测试1","maktg":"JOSN测试1"},{"mandt":"200","matnr":"1002","spras":"1","maktx":"测试2","maktg":"JOSN测试2"}]'.
/ui2/cl_json=>deserialize( EXPORTING json = gv_json pretty_name = /ui2/cl_json=>pretty_mode-camel_case CHANGING data = gt_table ).
LOOP AT gt_table INTO gw_table.
  WRITE :/ gw_table-mandt,gw_table-matnr,gw_table-spras,gw_table-maktx,gw_table-maktg.
ENDLOOP.

测试结果

在这里插入图片描述

方案二:CL_TREX_JSON_SERIALIZER / CL_TREX_JSON_DESERIALIZER

DATA:zcl_ser   TYPE REF TO CL_TREX_JSON_SERIALIZER,   "abap转换成josn
     zcl_deser TYPE REF TO CL_TREX_JSON_DESERIALIZER, "josn转换成abap
     gv_json   TYPE string.

DATA : gt_table TYPE TABLE OF makt.
DATA : gw_table TYPE makt.

CLEAR gw_table.
gw_table-mandt = '200'.
gw_table-matnr = '1001'.
gw_table-spras = '1'.
gw_table-maktx = '测试1'.
gw_table-maktg = 'JOSN测试1'.
APPEND gw_table TO gt_table.

CLEAR gw_table.
gw_table-mandt = '200'.
gw_table-matnr = '1002'.
gw_table-spras = '1'.
gw_table-maktx = '测试2'.
gw_table-maktg = 'JOSN测试2'.
APPEND gw_table TO gt_table.

**--->方案一

*-->abap转json

CREATE OBJECT zcl_ser
  EXPORTING
    data = gt_table.

zcl_ser->serialize( ).

gv_json = zcl_ser->get_data( ).

WRITE gv_json.

*-->josn转abap

CLEAR gv_json.
gv_json = '[{mandt:"200",matnr:"1001",spras:"1",maktx:"测试1",maktg:"JOSN测试1"},{mandt:"200",matnr:"1002",spras:"1",maktx:"测试2",maktg:"JOSN测试2"}]'.

CLEAR : gt_table.

CREATE OBJECT zcl_deser.

zcl_deser->deserialize(
    EXPORTING json = gv_json
    IMPORTING abap = gt_table  ).


LOOP AT gt_table INTO gw_table.
  WRITE :/ gw_table-mandt,gw_table-matnr,gw_table-spras,gw_table-maktx,gw_table-maktg.
ENDLOOP.

测试结果
在这里插入图片描述
SAP在和外围系统交互的时候,json串里的空格可能会乱码,空格变成#,需要处理一下。

  REPLACE ALL OCCURRENCES OF cl_abap_char_utilities=>newline IN ev_json WITH space.

作者:小飞猪猪猪猪猪猪猪–CSDN

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小飞猪猪猪猪猪猪猪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值