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

ABAP中如何无大量换行格式化编写长JSON字符串字面量?

ABAP中JSON相关常见问题解答

1. 无需大量换行/格式化编写长JSON字符串字面量

  • 直接拼接字符串:ABAP支持用&&直接拼接多行字符串,无需额外换行符,示例:
    DATA(lv_json) = `{"key1":"value1","key2":"value2"` &&
                    `"key3":"value3","key4":"value4"}`.
    
  • 用INCLUDE嵌入:将JSON内容单独存入文本INCLUDE(通过SE38创建,类型选“文本”),在程序中用INCLUDE <INCLUDE_NAME>.引入即可,注意INCLUDE内的内容要符合ABAP字符串语法,比如用反引号包裹或处理好引号转义。
  • 类JS模板字符串的替代方案:ABAP无原生模板字符串,但7.02及以上版本支持字符串模板,通过&插入变量,示例:
    DATA(lv_key) = `key1`.
    DATA(lv_value) = `value1`.
    DATA(lv_json) = |{"{lv_key}":"{lv_value}","key2":"value2"}|.
    

2. 类似JSON.stringify的序列化方法

  • 使用/UI2/CL_JSON类:通过该类的serialize方法将内表或结构体转为JSON字符串,示例:
    TYPES: BEGIN OF ty_data,
             key1 TYPE string,
             key2 TYPE string,
           END OF ty_data.
    DATA(ls_data) = VALUE ty_data( key1 = `value1` key2 = `value2` ).
    DATA(lv_json) = /UI2/CL_JSON=>serialize( data = ls_data ).
    
  • ABAP 7.50+内置JSON函数:语法更简洁,示例:
    DATA(lv_json) = JSON( VALUE ty_data( key1 = `value1` key2 = `value2` ) ).
    

3. 更优的JSON解析方式

无需先反序列化到临时内表再循环插入字典表,直接反序列化为目标结构即可:

  • 用/UI2/CL_JSON直接反序列化:
    DATA(lt_dict) = VALUE ty_dict_table( ).
    /UI2/CL_JSON=>deserialize( EXPORTING json = lv_json CHANGING data = lt_dict ).
    
  • ABAP 7.50+内置JSON函数反序列化:
    DATA(lt_dict) = JSON( lv_json OPTIONS INTO DATA(lo_options) ).
    lo_options->set( name = if_json=>case_sensitive value = abap_true ).
    

4. 解析文件中JSON的实现

读取本地文件(前端)

DATA(lt_lines) TYPE string_table.
CALL METHOD cl_gui_frontend_services=>gui_upload
  EXPORTING
    filename = `C:\test.json`
    filetype = `ASC`
  CHANGING
    data_tab = lt_lines.
" 拼接为完整JSON字符串
CONCATENATE LINES OF lt_lines INTO DATA(lv_json_content) SEPARATED BY cl_abap_char_utilities=>newline.
" 反序列化到目标结构
DATA(lt_data) = VALUE ty_data_table( ).
/UI2/CL_JSON=>deserialize( EXPORTING json = lv_json_content CHANGING data = lt_data ).

读取应用服务器文件

DATA(lv_json_content) TYPE string.
OPEN DATASET `/usr/test.json` FOR INPUT IN TEXT MODE ENCODING DEFAULT.
READ DATASET `/usr/test.json` INTO lv_json_content.
CLOSE DATASET `/usr/test.json`.
" 后续反序列化步骤同上

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 01:45:21