• ABAP 内表与JSON转换


    一、内表转JSON

    "-----------------------------@斌将军-----------------------------
    TYPES: BEGIN OF ty_name_mapping,
             abap TYPE abap_compname,
             json TYPE string,
           END OF ty_name_mapping.
    
    TYPES:BEGIN OF ty_makt,
            matnr TYPE makt-matnr,
            spras TYPE makt-spras,
            maktx TYPE makt-maktx,
          END OF ty_makt.
    
    DATA:gt_makt TYPE TABLE OF ty_makt,
         gs_makt TYPE ty_makt.
    
    DATA:ls_mappings TYPE ty_name_mapping,
         lt_mappings TYPE HASHED TABLE OF ty_name_mapping WITH UNIQUE KEY abap.
    DATA:lv_json TYPE string.
    
    "填充内表数据
    SELECT
      matnr
      spras
      maktx
    FROM makt
    INTO TABLE gt_makt
    WHERE spras = sy-langu.
    
    "获取表结构字段
    *SELECT
    *  tabname,
    *  fieldname
    *FROM dd03l
    *INTO TABLE @DATA(lt_dd03l)
    *WHERE tabname = 'MAKT'
    *  AND as4local = 'A'.
    
    *LOOP AT lt_dd03l INTO DATA(ls_dd03l).
    *  CLEAR:ls_mappings.
    *  ls_mappings-abap = ls_dd03l-fieldname.
    *  ls_mappings-json = ls_dd03l-fieldname.
    *  TRANSLATE ls_mappings-json TO LOWER CASE.
    *  INSERT ls_mappings INTO TABLE lt_mappings.
    *ENDLOOP.
    
    "内表的字段为大写,转成JSON的键需要小写,
    *"在转换时配置字段映射
    *"获取内表结构字段
    *DATA(lo_table_basic) = CAST cl_abap_tabledescr( cl_abap_tabledescr=>describe_by_data( gt_makt ) ).
    *DATA(lo_struct_basic) = CAST cl_abap_structdescr( lo_table_basic->get_table_line_type( ) ).
    *DATA(lt_dd03l) = lo_struct_basic->get_components( ).
    *
    *"配置内表字段与JSON键的映射
    *LOOP AT lt_dd03l INTO DATA(ls_dd03l).
    *  CLEAR:ls_mappings.
    *  ls_mappings-abap = ls_dd03l-name.
    *  ls_mappings-json = ls_dd03l-name.
    *  TRANSLATE ls_mappings-json TO LOWER CASE.
    *  INSERT ls_mappings INTO TABLE lt_mappings.
    *ENDLOOP.
    DATA:lv_pre_name  TYPE char1.
      lv_pre_name = 'L'."JSON键为小写
    "内表转JSON
    lv_json = /ui2/cl_json=>serialize( data = gt_makt pretty_name = lv_pre_name name_mappings = lt_mappings ).
    
    WRITE:lv_json.
    "-----------------------------@斌将军-----------------------------

    二、JSON转内表

    "-----------------------------@斌将军-----------------------------
    "JSON转内表
    REFRESH:gt_makt.
    /ui2/cl_json=>deserialize( EXPORTING json = lv_json
                                          pretty_name = /ui2/cl_json=>pretty_mode-camel_case
                                CHANGING data = gt_makt ).
    "-----------------------------@斌将军-----------------------------
  • 相关阅读:
    Team Foundation Sidekicks 2010
    Asp.net页面传值的方式汇总
    轻量级IOC框架Ninject使用
    AutoMapper使用简单总结
    页面请求的方式(Get与Post)
    总结2012 规划2013
    在reset css后两个input之间还是出现默认间隔的问题。
    js学习笔记事件委托
    程序猿工具——svn
    JS 事件添加onclick写法注意。
  • 原文地址:https://www.cnblogs.com/BinGeneral/p/16374052.html
Copyright © 2020-2023  润新知