You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在ABAP ADT中将指定JSON转换为CSV,询问适用函数

在ABAP ADT中将JSON转换为CSV的实现方法

一、先将JSON数据解析为ABAP内表

ABAP中常用/UI2/CL_JSON类的DESERIALIZE方法完成JSON到内表的转换,注意你提供的JSON格式存在语法问题,需将多个对象包裹为数组才能正确解析,具体步骤如下:

  1. 定义与JSON结构匹配的ABAP结构体和内表类型:
TYPES: BEGIN OF ty_person,
         name   TYPE string,
         age    TYPE string,
         gender TYPE string,
       END OF ty_person.
TYPES: tt_person TYPE STANDARD TABLE OF ty_person WITH EMPTY KEY.

DATA(lt_person) = VALUE tt_person( ).
* 修正后的JSON数组格式
DATA(lv_json) = `[
        {"name": "John","age": "22","gender": "male"},
        {"name": "ram","age": "21","gender": "male"},
        {"name": "Janu","age": "22","gender": "female"}
    ]`.
  1. 调用反序列化方法将JSON转成ABAP内表:
/UI2/CL_JSON=>DESERIALIZE(
  EXPORTING
    json = lv_json
  CHANGING
    data = lt_person
).

二、将内表转换为CSV格式

推荐使用CL_ABAP_CSV_WRITER类(ABAP 7.40及以上版本支持)生成标准CSV内容,该类可灵活处理分隔符、引号规则和编码:

* 创建CSV写入器实例
DATA(lo_csv_writer) = CL_ABAP_CSV_WRITER=>CREATE(
  separator       = ','
  quote_mode      = CL_ABAP_CSV_WRITER=>QUOTE_MODE_ALL " 为所有字段添加引号,避免特殊字符干扰
  encoding        = 'UTF-8'
).

* 写入CSV表头
lo_csv_writer->WRITE( VALUE #( ( 'name' ) ( 'age' ) ( 'gender' ) ) ).

* 遍历内表写入数据行
LOOP AT lt_person INTO DATA(ls_person).
  lo_csv_writer->WRITE( VALUE #( ( ls_person-name ) ( ls_person-age ) ( ls_person-gender ) ) ).
ENDLOOP.

* 获取最终的CSV字符串
DATA(lv_csv) = lo_csv_writer->GET_RESULT( ).

如果需要将CSV内容直接下载到本地,可结合GUI_DOWNLOAD函数(需GUI环境支持):

CALL FUNCTION 'GUI_DOWNLOAD'
  EXPORTING
    filename                = 'C:\temp\person_list.csv'
    filetype                = 'ASC'
    write_field_separator   = ','
    codepage                = 'UTF-8'
  TABLES
    data_tab                = lt_person
  EXCEPTIONS
    file_write_error        = 1
    no_batch                = 2
    gui_refuse_filetransfer = 3
    invalid_type            = 4
    no_authority            = 5
    unknown_error           = 6
    header_not_allowed      = 7
    separator_not_allowed   = 8
    filesize_not_allowed    = 9
    header_too_long         = 10
    dp_error_create         = 11
    dp_error_send           = 12
    dp_error_write          = 13
    unknown_dp_error        = 14
    access_denied           = 15
    dp_out_of_memory        = 16
    disk_full               = 17
    dp_timeout              = 18
    file_not_found          = 19
    dataprovider_exception  = 20
    control_flush_error     = 21
    OTHERS                  = 22.
IF sy-subrc <> 0.
  " 按需处理异常逻辑
ENDIF.

内容的提问来源于stack exchange,提问作者revanth

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 21:45:37