我从URL中获取数据,数据存储在json format.now中的一个变量中,我需要解析这个json格式,但我无法解析数据。下面是代码
CLASS zcode_82 DEFINITION
PUBLIC
FINAL
CREATE PUBLIC .
PUBLIC SECTION.
INTERFACES if_oo_adt_classrun .
DATA:lv_response TYPE string,
lv_body type string,
lv_path type string,
lv_json TYPE /ui2/cl_json=>json,
r_json type string.
types: begin of ty_data,
field type string,
id type string,
customer type string,
customer_id type string,
address type string,
date_Created type string,
time_created type string,
END OF TY_DATA.
data: lv_data type STANDARD TABLE OF ty_data with DEFAULT KEY,
lr_data TYPE REF TO data,
ls_data type ty_data.
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
CLASS zcode_82 IMPLEMENTATION.
METHOD if_oo_adt_classrun~main.
DATA: lv_body_1 TYPE string,
ls_value type RANGE OF ty_data.
TRY.
"create http destination by url; API endpoint for API sandbox
DATA(lo_http_destination) =
cl_http_destination_provider=>create_by_url( 'enter the url ' ).
"create HTTP client by destination
DATA(lo_web_http_client) = cl_web_http_client_manager=>create_by_http_destination( lo_http_destination ) .
"adding headers with API Key for API Sandbox
DATA(lo_web_http_request) = lo_web_http_client->get_http_request( ).
lo_web_http_request->set_header_fields( VALUE #(
( name = 'Authorization' value = 'Bearer key' )
( name = 'Content-Type' value = 'application/json' )
) ).
"set request method and execute request
DATA(lo_web_http_response) = lo_web_http_client->execute( if_web_http_client=>get ).
lv_response = lo_web_http_response->get_text( ).
CATCH cx_http_dest_provider_error cx_web_http_client_error cx_web_message_error.
"error handling
ENDTRY.
* out->write( |response: { lv_response }| ).
*
CLEAR lv_data[].
/ui2/cl_json=>deserialize(
EXPORTING
json = lv_Response
* jsonx =
pretty_name = /ui2/cl_json=>pretty_mode-user
* assoc_arrays =
* assoc_arrays_opt =
* name_mappings =
* conversion_exits =
* hex_as_base64 =
CHANGING
data = lv_data
).
out->write(
EXPORTING
data = lv_data
* name =
* RECEIVING
* output =
).
endmethod.
endclass.在这里,从url下载的数据是输入,输入是
response: {"records":[{"id":"rec5Qk24OQpKDyykq","createdTime":"2022-08-03T10:14:43.000Z","fields":{"customer_id":"0000010001","address":"Chennai","created_time":"06:00:14","customer":"IDADMIN","date_created":"16.04.2004"}},{"id":"rec7bSe8Zb18z6b5a","createdTime":"2022-08-08T13:07:16.000Z","fields":{"customer_id":"0000010007","address":"Kakinada","created_time":"04:01:18","customer":"Ramya","date_created":"15.04.2000"}},{"id":"recD9Hh4YLgNXOhUE","createdTime":"2022-08-08T11:48:06.000Z","fields":{"customer_id":"0000010002","address":"Bangalore","created_time":"04:03:35","customer":"MAASSBERG","date_created":"20.04.2004"}},{"id":"recK7Tfw4PFAedDiB","createdTime":"2022-08-03T10:14:43.000Z","fields":{"customer_id":"0000010005","address":"Chennai","created_time":"06:00:49","customer":"IDADMIN","date_created":"21.04.2004"}},{"id":"recKOq0DhEtAma7BV","createdTime":"2022-08-03T10:14:43.000Z","fields":{"customer_id":"0000010006","address":"Hyderabad","created_time":"18:42:28","customer":"GLAESS","date_created":"21.04.2004"}},{"id":"recS8pg10dFBGj8o7","createdTime":"2022-08-03T10:14:43.000Z","fields":{"customer_id":"0000010003","address":"Gurugram","created_time":"04:10:02","customer":"MAASSBERG","date_created":"20.04.2004"}},{"id":"recf4QbOmKMrBeLQZ","createdTime":"2022-08-03T10:14:43.000Z","fields":{"customer_id":"0000010004","address":"Bangalore","created_time":"06:00:12","customer":"IDADMIN","date_created":"21.04.2004"}},{"id":"recs7oHEqfkN87`enter code here`tWm","createdTime":"2022-08-03T10:14:43.000Z","fields":{"customer_id":"0000010000","address":"Hyderabad","created_time":"04:01:18","customer":"MAASSBERG","date_created":"15.04.2004"}}]}代码的输出是
Table
FIELD ID CUSTOMER CUSTOMER_ID ADDRESS DATE_CREATED TIME_CREATED 发布于 2022-10-10 21:34:46
您的结构类型与JSON结构不匹配。您不能简单地跳过外部records数组,并期望反序列化器知道您想要反序列化其中的内容。与字符串的fields对象相同,它是一个对象/结构,而不是字符串。
JSON类型如下所示
{
"records":[
{
"id":"rec5Qk24OQpKDyykq",
"createdTime":"2022-08-03T10:14:43.000Z",
"fields":{
"customer_id":"0000010001",
"address":"Chennai",
"created_time":"06:00:14",
"customer":"IDADMIN",
"date_created":"16.04.2004"
}
},
...TYPES: BEGIN OF ty_field,
customer_id TYPE string,
address TYPE string,
created_time TYPE string,
customer TYPE string,
date_created TYPE string,
END OF ty_field.
TYPES: BEGIN OF ty_record,
id TYPE string,
createdtime TYPE string,
fields TYPE ty_field,
END OF ty_record.
TYPES tt_record TYPE STANDARD TABLE OF ty_record WITH EMPTY KEY.
TYPES: BEGIN OF ty_response,
records TYPE tt_record,
END OF ty_response.然后可以使用像DATA ls_response TYPE ty_response这样的变量作为data参数。
附带注意:如果可以,可以考虑使用使用JSON数据的简单转换。在那里,您可以微调名称(mix snake_case和camelCase),这些字段要序列化、反序列化、要求/可选,而且速度更快(特别是使用更大的json文件)。
https://stackoverflow.com/questions/74002461
复制相似问题