ABAP调用第三方API及JSON解析

*&---------------------------------------------------------------------*
*& Report YN_API_DEMO02
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT YN_API_DEMO02.

DATACL_SY_REF_IS_INITIAL TYPE REF TO CX_SY_REF_IS_INITIAL,
      CL_XSLT_FORMAT_ERROR TYPE REF TO CX_XSLT_FORMAT_ERROR.

DATA LV_MESSAGE TYPE BAPI_MSG.
DATA LV_RETURN  TYPE I.
DATA LV_URL     TYPE STRING.

TYPESBEGIN OF T_DISTRICTS4,
         CODE  TYPE STRING,
         NAME  TYPE STRING,
         LEVEL TYPE I,
       END OF T_DISTRICTS4.
TYPESTT_DISTRICTS4 TYPE STANDARD TABLE OF T_DISTRICTS4 WITH DEFAULT KEY.
TYPESBEGIN OF T_DISTRICTS3,
         CODE      TYPE STRING,
         NAME      TYPE STRING,
         LEVEL     TYPE I,
         DISTRICTS TYPE TT_DISTRICTS4,
       END OF T_DISTRICTS3.
TYPESTT_DISTRICTS3 TYPE STANDARD TABLE OF T_DISTRICTS3 WITH DEFAULT KEY.
TYPESBEGIN OF T_DISTRICTS2,
         CODE      TYPE STRING,
         NAME      TYPE STRING,
         LEVEL     TYPE I,
         DISTRICTS TYPE TT_DISTRICTS3,
       END OF T_DISTRICTS2.
TYPESTT_DISTRICTS2 TYPE STANDARD TABLE OF T_DISTRICTS2 WITH DEFAULT KEY.
TYPESBEGIN OF T_JSON1,
         STATUS       TYPE I,
         DATA_VERSION TYPE STRING,
         RESULT_SIZE  TYPE I,
         DISTRICTS    TYPE TT_DISTRICTS2,
       END OF T_JSON1.

DATA LS_RECORD TYPE T_JSON1.
DATA LV_KEYWORD TYPE STRING VALUE '440000'.
DATA LV_SUB_ADMIN TYPE STRING VALUE '2'.
DATA LV_AK TYPE STRING VALUE 'vPYH1Cdua7cBePxFFrphmdL6kfAXHdnq'.

DATA LV_STATUS TYPE STRING .
DATA LV_DATA_VERSION TYPE STRING .
DATA LV_RESULT_SIZE TYPE STRING .

START-OF-SELECTION.
  LV_URL 'http://api.map.baidu.com/api_region_search/v1/?keyword=' && LV_KEYWORD && '&sub_admin=' && LV_SUB_ADMIN && '&ak=' && LV_AK .
  CONDENSE LV_URL NO-GAPS .

  "根据URL生成HTTP代理
  CALL METHOD CL_HTTP_CLIENT=>CREATE_BY_URL(
    EXPORTING
      URL                LV_URL
    
IMPORTING
      CLIENT             DATA(LO_HTTP_CLIENT)
    EXCEPTIONS
      ARGUMENT_NOT_FOUND 1
      PLUGIN_NOT_ACTIVE  2
      INTERNAL_ERROR     3
      OTHERS             ).

*设置 HTTP 版本
  LO_HTTP_CLIENT->REQUEST->SET_VERSIONIF_HTTP_REQUEST=>CO_PROTOCOL_VERSION_1_0 ).

  CHECK LO_HTTP_CLIENT IS NOT INITIAL.
*HTTP代理设置GET方法
  LO_HTTP_CLIENT->REQUEST->SET_METHODIF_HTTP_REQUEST=>CO_REQUEST_METHOD_GET ).

  TRY.
      "发送HTTPS请求
      CALL METHOD LO_HTTP_CLIENT->SEND
        
EXCEPTIONS
          HTTP_COMMUNICATION_FAILURE 1
          HTTP_INVALID_STATE         2.

      CALL METHOD LO_HTTP_CLIENT->RECEIVE
        EXCEPTIONS
          HTTP_COMMUNICATION_FAILURE 1
          HTTP_INVALID_STATE         2
          HTTP_PROCESSING_FAILED     3.

    CATCH CX_SY_REF_IS_INITIAL INTO CL_SY_REF_IS_INITIAL.
      LV_MESSAGE CL_SY_REF_IS_INITIAL->IF_MESSAGE~GET_TEXT( ).
      MESSAGE LV_MESSAGE TYPE 'E'.
  ENDTRY.

获取数据
  DATA(LV_JSON) = LO_HTTP_CLIENT->RESPONSE->GET_CDATA( ).
*关闭HTTP链接
  LO_HTTP_CLIENT->CLOSE( ).
*转成大写
  TRANSLATE LV_JSON TO UPPER CASE .
  /UI2/CL_JSON=>DESERIALIZEEXPORTING JSON LV_JSON
                                       PRETTY_NAME 
/UI2/CL_JSON=>PRETTY_MODE-CAMEL_CASE
                              
CHANGING DATA LS_RECORD ).
  BREAK-POINT.
*  DATA(OUT) = CL_DEMO_OUTPUT=>NEW( ).
*  OUT->BEGIN_SECTION( `行政区划查询服务输出`
*  )->WRITE( LS_RECORD ).
*  OUT->DISPLAY( ).

 

 

 使用/UI2/CL_JSON解析时需要先定义json对应的abap类型,这里推荐一个开源工具可以通过json直接生成abap结构,项目地址如下

https://github.com/fidley/JSON2ABAPTypeicon-default.png?t=M4ADhttps://github.com/fidley/JSON2ABAPType

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
ABAP是一种高级编程语言,通常用于SAP系统的开发,它是面向对象的,可扩展的,具有跨平台的特性。而JSON是一种轻量级的数据交换格式,由于它具有易读性,易解析性以及广泛的支持,已经成为Web开发、移动开发等领域的数据传输标准。 对于在SAP系统中使用JSON数据格式的情况,我们需要使用ABAP中的JSON解析器来将JSON数据转化为ABAP内部的数据结构。在ABAP中,有两种常用的JSON解析方式: 1. JSON转换器(SAP内部类型) 这种方式是将JSON字符串转换成SAP内部类型的结构(例如table、structure、string、numeric值等),从而方便我们在ABAP程序中进行后续的操作。 首先需要通过调用兼容JSON的结构描述语言的类,生成兼容JSON语法的文档类型,之后再根据需要的数据结构,利用WRITE_JSON_FILE函数生成JSON数据格式,最后再将JSON数据格式传入PARSE_JSON()函数解析。 利用JSON转换器的方式,我们可以通过简单的语句实现JSON数据与ABAP内部数据的转化,但是由于其复杂的使用方式,这种方法不太适合在大型的应用中使用。 2. JSON解析器接口(SAP内置类) 另外一种解析JSON数据的方式是使用SAP内置的JSON解析器接口,这种方法比较容易理解和使用,也比较适合在大型的应用中使用。 ABAP中提供了CL_TREX_JSON_PARSER类,它可以处理所有JSON数据结构(例如object、array、value等)并将其转换成ABAP数据类型。利用该类,我们可以轻松地将JSON数据转换为ABAP内部数据结构,同时也能够轻松地将ABAP数据类型转换为JSON数据格式。 总而言之,无论是使用SAP内置的JSON转换器,还是直接在ABAP中使用JSON解析器接口,都可以轻松地将JSON数据转换成ABAP内部数据结构,并进行各种操作或者通过HTTP或其他协议与外部系统进行数据交互。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值