ABAP JSON数据转换 JSON数据转内表 内表转JSON数据 /UI2/CL_JSON=>DESERIALIZE /UI2/CL_JSON=>SERIALIZE

JSON数据转内表

JSON是JavaScript对象表示法(JavaScript Object Notation)的缩写,是一种轻量级的数据交换格式。它是一种基于文本的、独立于平台的数据交换格式,易于人类阅读和编写,也易于机器解析和生成。JSON格式为键值对的集合,其值可以是对象、数组、字符串、数值、布尔值或null等简单数据类型。它已成为大多数Web服务的标准数据格式,被广泛用于前后端数据传输和存储。

在abap中主要调用方法/UI2/CL_JSON=>DESERIALIZE实现JSON数据转内表数据

实现效果如下:

image-20230627172444162

数据准备:

image-20230627172532932

[
    {
        "name":"张国立",
        "age":12,
        "hobby":[
            "1",
            "2"
        ]
    },
    {
        "name":"张铁林",
        "age":0,
        "hobby":[
        ]
    },
    {
        "name":"邓婕",
        "age":12,
        "hobby":[
            "1",
            "2"
        ]
    },
    {
        "name":"张国立",
        "age":12,
        "hobby":[
            "1",
            "2"
        ]
    },
    {
        "name":"张铁林",
        "age":12,
        "hobby":[
            "1",
            "2"
        ]
    },
    {
        "name":"邓婕",
        "age":12,
        "hobby":[
            "1",
            "2"
        ]
    }
]

实现代码:

SELECTION-SCREEN BEGIN OF BLOCK BLK01 WITH FRAME.
PARAMETERS: P_PATH TYPE STRING.
SELECTION-SCREEN END OF BLOCK BLK01.


AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_PATH.
  DATA:LT_FTABLE TYPE FILETABLE,
       LV_RC     TYPE I.
  CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG
    EXPORTING
      WINDOW_TITLE            = '选择文件'
    CHANGING
      FILE_TABLE              = LT_FTABLE
      RC                      = LV_RC
    EXCEPTIONS
      FILE_OPEN_DIALOG_FAILED = 1
      CNTL_ERROR              = 2
      ERROR_NO_GUI            = 3
      NOT_SUPPORTED_BY_GUI    = 4
      OTHERS                  = 5.
  IF SY-SUBRC = 0 AND LT_FTABLE IS NOT INITIAL.
    READ TABLE LT_FTABLE INTO DATA(LS_FTABLE) INDEX 1.
    P_PATH = LS_FTABLE-FILENAME.
  ENDIF.


START-OF-SELECTION.
  DATA : LT_TABLE TYPE STRING_TABLE.  "对应DATA_TAB是没指定类型的 所以就使用STRING_TABLE
  DATA:LV_JSON TYPE STRING.
  "定义一个JSON对应的结构
  TYPES:BEGIN OF TY_DATA,
          NAME  TYPE STRING,
          AGE   TYPE I,
          HOBBY TYPE STRING_TABLE.
  TYPES END OF TY_DATA.
  DATA:LT_DATA TYPE TABLE OF TY_DATA.
*  DATA:LS_DATA TYPE  TY_DATA. “如果是单条数据 就用工作区来接受数据
  IF P_PATH IS INITIAL.
    MESSAGE 'ERROR PATH' TYPE 'E'.
  ENDIF.
  CALL FUNCTION 'GUI_UPLOAD'
    EXPORTING
      FILENAME                = P_PATH
    TABLES
      DATA_TAB                = LT_TABLE
    EXCEPTIONS
      FILE_OPEN_ERROR         = 1
      FILE_READ_ERROR         = 2
      NO_BATCH                = 3
      GUI_REFUSE_FILETRANSFER = 4
      INVALID_TYPE            = 5
      NO_AUTHORITY            = 6
      UNKNOWN_ERROR           = 7
      BAD_DATA_FORMAT         = 8
      HEADER_NOT_ALLOWED      = 9
      SEPARATOR_NOT_ALLOWED   = 10
      HEADER_TOO_LONG         = 11
      UNKNOWN_DP_ERROR        = 12
      ACCESS_DENIED           = 13
      DP_OUT_OF_MEMORY        = 14
      DISK_FULL               = 15
      DP_TIMEOUT              = 16
      OTHERS                  = 17.
  IF SY-SUBRC <> 0.
    MESSAGE 'ERROR READ' TYPE 'E'.
  ENDIF.
  IF LT_TABLE IS NOT INITIAL.
    LOOP AT LT_TABLE INTO DATA(LS_TABLE).
      LV_JSON = LV_JSON && LS_TABLE.
      CLEAR LS_TABLE.
    ENDLOOP.
  ENDIF.
"调用方法转换数据
  CALL METHOD /UI2/CL_JSON=>DESERIALIZE
    EXPORTING
      JSON = LV_JSON
    CHANGING
      DATA = LT_DATA.
*      DATA = LS_DATA.
  BREAK-POINT.

内表数据转JSON

在接口中有时候会遇到输出JSON数据,此时我们就要将目标内表数据转为JSON,在ABAP中有一个标准的方法可以将内表数据转换为JSON字符串:/UI2/CL_JSON=>SERIALIZE

"内表转Json
  DATA:LV_JSON2 TYPE STRING."接收JSON数据字符串
**********************
*这里是根据源代码创建的名称映射表
*java等其他编程语言都是大小写敏感的,所以需要变为对应的名称
  TYPES:
    BEGIN OF NAME_MAPPING,
      ABAP TYPE ABAP_COMPNAME,
      JSON TYPE STRING,
    END OF NAME_MAPPING .
  DATA:
    NAME_MAPPINGS TYPE HASHED TABLE OF NAME_MAPPING WITH UNIQUE KEY ABAP . "ABAP和JSON名称映射表
  NAME_MAPPINGS = VALUE #(
    ( ABAP = 'NAME' JSON = 'name' )
    ( ABAP = 'AGE' JSON = 'age' )
    ( ABAP = 'HOBBY' JSON = 'hobby' )
   )."设置映射值
***********************

  CALL METHOD /UI2/CL_JSON=>SERIALIZE
    EXPORTING
      DATA          = LT_DATA
      NAME_MAPPINGS = NAME_MAPPINGS
    RECEIVING
      R_JSON        = LV_JSON2.

LT_DATA数据如下:

image-20230628095404793

实现效果如下:

image-20230628095522790

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值