abap-json 数据解析和转换

14 篇文章 0 订阅
这篇博客介绍了在ABAP中处理JSON的方法,包括使用系统标准函数进行序列化和反序列化,以及如何通过自定义transformation保持字段大小写。在自定义转换中,涉及了XML到JSON的转换、字符串处理和二进制转换。这些技术对于ABAP开发者在处理JSON数据时非常实用。
摘要由CSDN通过智能技术生成

1. 系统标准方法

    /ui2/cl_json=>deserialize(
       EXPORTING
         json            = json
       CHANGING
         data            = data
           ).
    json = /ui2/cl_json=>serialize( data             = data ).
DATA: deserializer TYPE REF TO cl_trex_json_deserializer.
    CREATE OBJECT deserializer.
    deserializer->deserialize(
      EXPORTING
        json    = json
      IMPORTING
         abap   = abap
       ).
          DATA: serializer TYPE REF TO cl_trex_json_serializer.
          CREATE OBJECT serializer
            EXPORTING
              data = data.
          CALL METHOD serializer->serialize( ).
          json = serializer->get_data( ).

2. 使用transformation进行json转换,如果需要字段映射保留大小写,可以自定义transformation

    DATA: lo_writer        TYPE REF TO cl_sxml_string_writer,
          lv_output_length TYPE i,
          lt_binary_tab    TYPE STANDARD TABLE OF sdokcntbin,
          lv_jsonx         TYPE xstring.

    FIELD-SYMBOLS: <xt_json> TYPE i.

    ASSIGN ('IF_SXML=>CO_XT_JSON') TO <xt_json>.
    IF <xt_json> IS ASSIGNED.

      lo_writer = cl_sxml_string_writer=>create( type = <xt_json> ).

      CALL TRANSFORMATION id SOURCE text = data RESULT XML lo_writer.

      lv_jsonx = lo_writer->get_output( ).
      CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
        EXPORTING
          buffer        = lv_jsonx
        IMPORTING
          output_length = lv_output_length
        TABLES
          binary_tab    = lt_binary_tab.
      CALL FUNCTION 'SCMS_BINARY_TO_STRING'
        EXPORTING
          input_length  = lv_output_length
        IMPORTING
          text_buffer   = rv_json
          output_length = lv_output_length
        TABLES
          binary_tab    = lt_binary_tab.

      " strip {"TEXT":
      rv_json = rv_json+8.

      " strip trailing }
      lv_output_length = strlen( rv_json ) - 1.
      rv_json = rv_json(lv_output_length).
    ENDIF.

3. git开源项目代码不再举例可自行关键词abap json搜索

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值