ABAP JSON字符串解析 JOSN转换为内表

直接开干:代码如下:拿去不谢

REPORT zgdm_json.


DATA: result      TYPE        string.

"============================================JSON 字段串解析 至 内表 ========begin ===============================
DATA: BEGIN OF itab OCCURS 0,
        msg  TYPE char200,
        code TYPE char10,
      END OF itab.

DATA: json_ser TYPE REF TO cl_trex_json_serializer,
      json_des TYPE REF TO cl_trex_json_deserializer.
DATA: jsonstr TYPE string.


"---JSON字段名称没双引号用这方法
FREE itab.
result = '[{msg: "测试JSON返回1111",code: 0}]'.
WRITE:/ '要解析的JSON:'.
WRITE: result.

CREATE OBJECT json_des.
CALL METHOD json_des->deserialize
  EXPORTING
    json = result
  IMPORTING
    abap = itab[].
WRITE:/ '转为内表后输出:'.
LOOP AT itab.
  WRITE:/ itab-msg .
  WRITE: itab-code.
ENDLOOP.


WRITE:/ '------------------------------------------------------'.

"---JSON字段名称有双引号用这方法
FREE itab.
result = '[{"msg": "测试JSON返回2222","code": 0}]'.
WRITE:/ '要解析的JSON:'.
WRITE: result.

/ui2/cl_json=>deserialize( EXPORTING json = result CHANGING data = itab[] ).
WRITE:/ '转为内表后输出:'.
LOOP AT itab.
  WRITE:/ itab-msg.
  WRITE: itab-code.
ENDLOOP.

WRITE:/ '------------------------------------------------------'.
"-------------------------------------------------------------------------------------------复杂级别 -- JSON ---解析---
***{
***      "R_RET_CODE": "0",
***      "R_RESP_DATA": [      {
***         "MORDER_NAME": "EA20X/总成开发",
***         "MORDER_CODE": "000011600918"
***      }]
***}
result = '{"R_RET_CODE": "0","R_RESP_DATA": [{"MORDER_NAME": "EA20X/总成开发","MORDER_CODE": "000011600918"}]}'.

WRITE:/ '要转换的JOSN字符:'.
WRITE: result.

TYPES:BEGIN OF ty_result,
        r_ret_code  TYPE char100,
        r_resp_data TYPE zit_test_resp_json,
        "--zit_test_resp_json类型为表类型,表类型的结构字段如下:
*        MORDER_NAME  类型  TXT50 CHAR  50  0 文本
*        MORDER_CODE  类型  TXT50 CHAR  50  0 文本
      END OF ty_result.
DATA:w_result TYPE ty_result.

DATA:wa_resp_data TYPE zwa_test_resp_json.
DATA:it_resp_data TYPE zit_test_resp_json.

/ui2/cl_json=>deserialize( EXPORTING json = result CHANGING data = w_result ).

WRITE:/ '转为内表后输出:'.
IF w_result-r_ret_code = '0'.

  WRITE:/ w_result-r_ret_code.
  it_resp_data[] = w_result-r_resp_data[].

  LOOP AT it_resp_data INTO wa_resp_data.
    WRITE: wa_resp_data-morder_name.
    WRITE: wa_resp_data-morder_code.
  ENDLOOP.

ENDIF.

  • 13
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

被挤的奶牛

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

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

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

打赏作者

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

抵扣说明:

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

余额充值