在ABAP ADT中将指定JSON转换为CSV,询问适用函数
在ABAP ADT中将JSON转换为CSV的实现方法
一、先将JSON数据解析为ABAP内表
ABAP中常用/UI2/CL_JSON类的DESERIALIZE方法完成JSON到内表的转换,注意你提供的JSON格式存在语法问题,需将多个对象包裹为数组才能正确解析,具体步骤如下:
- 定义与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"} ]`.
- 调用反序列化方法将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
相关产品推荐
相关产品推荐

