首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在abap btp环境中使用反序列化解析json

在abap btp环境中使用反序列化解析json
EN

Stack Overflow用户
提问于 2022-10-09 06:02:35
回答 1查看 104关注 0票数 0

我从URL中获取数据,数据存储在json format.now中的一个变量中,我需要解析这个json格式,但我无法解析数据。下面是代码

代码语言:javascript
复制
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下载的数据是输入,输入是

代码语言:javascript
复制
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"}}]}

代码的输出是

代码语言:javascript
复制
Table  
FIELD  ID  CUSTOMER  CUSTOMER_ID  ADDRESS  DATE_CREATED  TIME_CREATED  
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-10 21:34:46

您的结构类型与JSON结构不匹配。您不能简单地跳过外部records数组,并期望反序列化器知道您想要反序列化其中的内容。与字符串的fields对象相同,它是一个对象/结构,而不是字符串。

JSON类型如下所示

代码语言:javascript
复制
{
   "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"
         }
      },
      ...
代码语言:javascript
复制
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文件)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74002461

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档