例子:获取数据响应如下:
{
"code":"10000",
"subCode":"10000",
"msg":"success",
"subMsg":"success",
"data":{
"datas":[
{
"projectId":0,
"projectName":"",
"userFullName":"",
"userId":"",
"joinMethod":0,
"joinTime":"",
"startStudyTime":"",
"completedAllTime":"",
"lastStudyTime":"",
"schedule":"",
"completed":0,
"completeTaskAll":0,
"completeTaskCompulsory":0,
"completeTaskElective":0,
"projectScore":0,
"passed":0,
"projectComments":"",
"outStanding":0,
"point":0,
"score":0,
"totalDuration":0,
"deleted":0,
"removeStatus":0,
"userDeleted":0,
"userStatus":0,
"thirdUserId":"BH89757",
"periods":[
{
"id":0,
"name":"",
"tasks":[
{
"taskId":0,
"taskName":"",
"rate":0,
"point":0,
"score":0,
"duration":0,
"startTime":"",
"completedTime":"",
"delay":0,
"achievement":0,
"passed":0,
"attendance":0,
"taskType":9
}
]
}
]
}
],
"paging":{
"count":0,
"limit":0,
"offset":0,
"pages":0
}
}
}
转换代码大致如下:
TYPES: BEGIN OF ty_final,
userid TYPE string,
completedalltime TYPE string,
END OF ty_final.
DATA: ls_final TYPE ty_final,
lt_final TYPE TABLE OF ty_final,
lt_header TYPE tihttpnvp,
ls_header TYPE ihttpnvp.
DATA: lt_fields TYPE tihttpnvp,
go_alv TYPE REF TO cl_salv_table,
lv_msg TYPE string.
DATA:
lv_json TYPE string, "返回参数
lv_json3 TYPE string, "传输报文
json_des TYPE REF TO cl_trex_json_deserializer,
lv_json1 TYPE string, "获取传回值数据
lv_json2 TYPE string. "获取传回值数据
FIELD-SYMBOLS:
<data> TYPE data,
<results> TYPE ANY TABLE,
<structure> TYPE any,
<table> TYPE ANY TABLE,
<field> TYPE any,
<prod_tab> TYPE any,
<prod_tab1> TYPE any,
<field_value> TYPE data.
CLEAR: ls_header.
ls_header-name = 'Authorization'.
ls_header-value = lv_token.
APPEND ls_header TO lt_header.
CLEAR: ls_header.
ls_header-name = 'Content-Type'.
ls_header-value = 'application/json; charset=utf-8'.
APPEND ls_header TO lt_header.
CLEAR:url.
url = '*************************************8'.
*--------------------------------------------------------------------------------------------------------
"创建http客户端
CALL METHOD cl_http_client=>create_by_url
EXPORTING
url = url
IMPORTING
client = http_client
EXCEPTIONS
argument_not_found = 1
plugin_not_active = 2
internal_error = 3
OTHERS = 4.
"设定传输请求内容格式以及编码格式
http_client->request->set_content_type( content_type = 'application/json; charset=utf-8' ).
http_client->request->set_method( if_http_request=>co_request_method_post ).
"设置传输头
CALL METHOD http_client->request->set_header_fields
EXPORTING
fields = lt_header.
"设置调用方法
CALL METHOD http_client->request->set_header_field
EXPORTING
name = '~request_method'
value = 'POST'.
*--------------------------------------------------------------------------------------------------------
CLEAR :lt_res,lv_header .
CLEAR: lv_json3.
lv_json3 = '{ "limit": 99 }'.
"设置待传输内容长度
len = strlen( lv_json3 ).
"设置传入字符串
CALL METHOD http_client->request->set_cdata
EXPORTING
data = lv_json3
offset = 0
length = len.
"发送
CALL METHOD http_client->send
EXCEPTIONS
http_communication_failure = 1
http_invalid_state = 2
http_processing_failed = 3
http_invalid_timeout = 4
OTHERS = 5.
IF sy-subrc <> 0.
"操作失败,获取失败原因
http_client->get_last_error( IMPORTING message = lv_result ).
EXIT.
ENDIF.
"接收
CALL METHOD http_client->receive
EXCEPTIONS
http_communication_failure = 1
http_invalid_state = 2
http_processing_failed = 3.
CLEAR:lv_result.
IF sy-subrc <> 0 .
http_client->get_last_error( IMPORTING message = lv_result ).
EXIT.
ENDIF.
CLEAR result.
result = http_client->response->get_cdata( )."提取返回字符串
result = '[' && result && ']' .
* ***JSON->内表
CLEAR:lt_token[],ls_token.
CALL METHOD /ui2/cl_json=>deserialize
EXPORTING
json = result
pretty_name = /ui2/cl_json=>pretty_mode-user
assoc_arrays = abap_true
CHANGING
data = lt_list.
IF lt_list IS BOUND.
ASSIGN lt_list->* TO <data>.
*返回信息有很多层,需要一层一层的剥离到自己需要的组件。
ASSIGN COMPONENT sy-tabix OF STRUCTURE <data> TO <results>.
LOOP AT <results> ASSIGNING <prod_tab> .
ASSIGN <prod_tab>->* TO <data>.
ASSIGN COMPONENT 'DATA' OF STRUCTURE <data> TO <field> .
ASSIGN <field>->* TO <data>.
ASSIGN COMPONENT 'DATAS' OF STRUCTURE <data> TO <field> .
ASSIGN <field>->* TO <data>.
ENDLOOP.
ASSIGN COMPONENT sy-tabix OF STRUCTURE <data> TO <results>.
IF <field> IS ASSIGNED.
LOOP AT <results> ASSIGNING <structure>.
ASSIGN <structure>->* TO <data>.
ASSIGN COMPONENT `THIRDUSERID` OF STRUCTURE <data> TO <field>.
IF <field> IS ASSIGNED.
lt_list = <field>.
ASSIGN lt_list->* TO <field_value>.
IF <field_value> IS ASSIGNED.
ls_final-userid = <field_value>.
ENDIF.
ENDIF.
UNASSIGN: <field>, <field_value>.
ASSIGN COMPONENT `COMPLETEDALLTIME` OF STRUCTURE <data> TO <field>.
IF <field> IS ASSIGNED.
lt_list = <field>.
ASSIGN lt_list->* TO <field_value>.
IF <field_value> IS ASSIGNED.
ls_final-completedalltime = <field_value>.
ENDIF.
ENDIF.
UNASSIGN: <field>, <field_value>.
APPEND ls_final TO lt_final.
CLEAR ls_final.
ENDLOOP.
lt_list = lt_final.
ENDIF.
ENDIF.