直接开干:代码如下:拿去不谢
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.