ABAP 表转JSON格式

news/2024/10/11 8:09:30/
FUNCTION ZRFC_FI_SEND_PAYPLAN2BPM.
*"----------------------------------------------------------------------
*"*"本地接口:
*"  IMPORTING
*"     VALUE(INPUT) TYPE  ZSRFC_FI_SEND_PAYBPM_IN
*"  EXPORTING
*"     VALUE(OUTPUT) TYPE  ZRFC_RETURN
*"----------------------------------------------------------------------DATA: LO_HTTP_CLIENT TYPE REF TO IF_HTTP_CLIENT.DATA: LO_WRITER          TYPE REF TO CL_SXML_STRING_WRITER.DATA:LV_ERR_TEXT      TYPE STRING,LV_JSON_OUT      TYPE XSTRING,LV_REQUEST       TYPE STRING,LV_URL           TYPE AGR_URL,LV_OUTPUT_LENGTH TYPE I,LV_URL_STR       TYPE STRING,LT_BINARY_TAB    TYPE STANDARD TABLE OF SDOKCNTBIN,RESULT           TYPE        STRING,LV_SERVER_NAME   TYPE ZE_SERVER_NAME,LS_ITEM          TYPE ZPDT_SEND_PAYBPM_REQ_DATA,LT_ITEM          TYPE  TABLE OF ZPDT_SEND_PAYBPM_REQ_DATA,LV_LEN           TYPE I.LV_SERVER_NAME = 'PAYPLAN'.SELECT SINGLE HOSTINTO LV_URLFROM /THINKWAY/TBUS0AWHERE EXCHANGE_SYSTEM = 'BPM'AND INSTANCE = 'PAYPLAN'.IF SY-SUBRC <> 0.OUTPUT-MSGTY = 'E'.OUTPUT-MSGTX  = '未找到目标地址'.ELSE.LV_URL_STR = LV_URL.CONDENSE LV_URL_STR.CALL METHOD CL_HTTP_CLIENT=>CREATE_BY_URLEXPORTINGURL                = LV_URL_STRIMPORTINGCLIENT             = LO_HTTP_CLIENTEXCEPTIONSARGUMENT_NOT_FOUND = 1PLUGIN_NOT_ACTIVE  = 2INTERNAL_ERROR     = 3OTHERS             = 4.*content_typeLO_HTTP_CLIENT->REQUEST->SET_CONTENT_TYPE( CONTENT_TYPE = 'application/json; charset=utf-8' ).LO_HTTP_CLIENT->REQUEST->SET_METHOD( IF_HTTP_REQUEST=>CO_REQUEST_METHOD_POST ).CLEAR LT_ITEM[].LOOP AT INPUT-ITEM INTO DATA(LS_INPUT).LS_INPUT-LIFNR = |{ LS_INPUT-LIFNR ALPHA = OUT }|.LS_INPUT-BELNR = |{ LS_INPUT-BELNR ALPHA = OUT }|.LS_INPUT-HKONT = |{ LS_INPUT-HKONT ALPHA = OUT }|.MOVE-CORRESPONDING LS_INPUT TO LS_ITEM.CONDENSE LS_ITEM-ZZDMBTR NO-GAPS.CONDENSE LS_ITEM-WRBTR NO-GAPS.LS_ITEM-ZFBDT = LS_ITEM-BUDAT.APPEND LS_ITEM TO LT_ITEM.ENDLOOP.LO_WRITER = CL_SXML_STRING_WRITER=>CREATE( TYPE = IF_SXML=>CO_XT_JSON ).CALL TRANSFORMATION ID SOURCE DATA = LT_ITEM[] RESULT XML LO_WRITER.LV_JSON_OUT = LO_WRITER->GET_OUTPUT( ).CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'EXPORTINGBUFFER        = LV_JSON_OUTIMPORTINGOUTPUT_LENGTH = LV_OUTPUT_LENGTHTABLESBINARY_TAB    = LT_BINARY_TAB.CALL FUNCTION 'SCMS_BINARY_TO_STRING'EXPORTINGINPUT_LENGTH  = LV_OUTPUT_LENGTHIMPORTINGTEXT_BUFFER   = LV_REQUESTOUTPUT_LENGTH = LV_OUTPUT_LENGTHTABLESBINARY_TAB    = LT_BINARY_TAB.LV_LEN = STRLEN( LV_REQUEST ).REPLACE ALL OCCURRENCES OF REGEX '"CONTROLLER":\[\],' IN LV_REQUEST WITH ''.
*-  通过PO抓取BPM的数据LV_LEN = STRLEN( LV_REQUEST ).CALL METHOD LO_HTTP_CLIENT->REQUEST->SET_HEADER_FIELDEXPORTINGNAME  = '~request_method'VALUE = 'POST'.CALL METHOD LO_HTTP_CLIENT->REQUEST->SET_CDATAEXPORTINGDATA   = LV_REQUESTOFFSET = 0LENGTH = LV_LEN.CALL METHOD LO_HTTP_CLIENT->SENDEXCEPTIONSHTTP_COMMUNICATION_FAILURE = 1HTTP_INVALID_STATE         = 2HTTP_PROCESSING_FAILED     = 3HTTP_INVALID_TIMEOUT       = 4OTHERS                     = 5."接收CALL METHOD LO_HTTP_CLIENT->RECEIVEEXCEPTIONSHTTP_COMMUNICATION_FAILURE = 1HTTP_INVALID_STATE         = 2HTTP_PROCESSING_FAILED     = 3.RESULT = LO_HTTP_CLIENT->RESPONSE->GET_CDATA( ).LO_HTTP_CLIENT->CLOSE( ).DATA: LJSONNODE TYPE REF TO ZCL_MDP_JSON_NODE.DATA:L_VALUEOBJ TYPE REF TO ZCL_MDP_JSON_NODE.LJSONNODE = ZCL_MDP_JSON_NODE=>DESERIALIZE( JSON = RESULT ).FREE LO_HTTP_CLIENT.L_VALUEOBJ = LJSONNODE->OBJECT_GET_CHILD_NODE( KEY = 'isSuccess' ).IF L_VALUEOBJ->VALUE = 'true'.OUTPUT-MSGTY = 'S'.OUTPUT-MSGTX = LJSONNODE->OBJECT_GET_CHILD_NODE( KEY = 'errorMsg' )->VALUE.ELSE.OUTPUT-MSGTY = 'E'.OUTPUT-MSGTX = LJSONNODE->OBJECT_GET_CHILD_NODE( KEY = 'errorMsg' )->VALUE.ENDIF.ENDIF.
ENDFUNCTION.

以上 ABAP转json后会产生 

"DATA":{"LT_ITEM":[{"CONTROLLER":[],"BUKRS":"1040","BUTXT":"XXXXX机械科技有限公司","LIFNR":"2000","NAME1":"XXXXX科技有限公司","BELNR":"100027622","BUZEI":"001","BUDAT":"20240930","BLDAT":"20240930","WRBTR":"49041.11","ZTERM":"C999","ZFBDT":"20240930","ZFAEL":"31","ZZ....

 的数据,而实际的 {"CONTROLLER":[],是不需要的

所以要用到 REPLACE ALL OCCURRENCES OF REGEX '"CONTROLLER":\[\],' IN LV_REQUEST WITH ''.

本来replace就可以了,因为有多个 所以 用到 REPLACE ALL OCCURRENCES OF REGEX 

注意 '"CONTROLLER":\[\],'    因为特殊符号 []  在,所以要用到转义一下 

参考数据

写于20241010 台州


http://www.ppmy.cn/news/1537344.html

相关文章

(Linux和数据库)1.Linux操作系统和常用命令

了解Linux操作系统介绍 除了办公和玩游戏之外不用Linux&#xff0c;其他地方都要使用Linux&#xff08;it相关&#xff09; iOS的本质是unix&#xff08;unix是付费版本的操作系统&#xff09; unix和Linux之间很相似 Linux文件系统和目录 bin目录--放工具使用的 操作Linux远程…

Ollama 运行视觉语言模型LLaVA

Ollama的LLaVA&#xff08;大型语言和视觉助手&#xff09;模型集已更新至 1.6 版&#xff0c;支持&#xff1a; 更高的图像分辨率&#xff1a;支持高达 4 倍的像素&#xff0c;使模型能够掌握更多细节。改进的文本识别和推理能力&#xff1a;在附加文档、图表和图表数据集上进…

zookeeper ——watcher

这应该不是目录 1.watcher定义和说明1.1定义1.2特性1.3watcher的通知状态Watcher.Event.KeeperState1.4watcher的事件类型Event.EventType1.5基本流程 1.watcher定义和说明 1.1定义 在ZooKeeper中&#xff0c;Watcher是一种机制&#xff0c;用于在节点&#xff08;znode&#…

uni-app如何搭建项目(一步一步教程)

来来来&#xff0c;看这里 uni-app新建项目教程uni-app项目结构 首先我们要有一个HBuilder这个软件&#xff0c;然后我们来搭建uni-app项目 uni-app新建项目教程 首先我们打开这个HBuilder软件&#xff0c;好我们就出现这个界面&#xff0c;我们点击新建项目   然后我们选择…

Android开发视频预览效果

Android开发视频预览效果 视频播放不是一个简单的事情&#xff0c;得有暂停&#xff0c;继续播放等功能&#xff0c;屏幕的适配也是头疼的事情 一、思路&#xff1a; 引用的是腾讯播放器TXVodPlayer 二、效果图&#xff1a; 图片不是很直观&#xff0c;也可以看下视频 And…

旅游平台|智慧旅游平台|基于java的智慧旅游平台设计与实现(源码+数据库+文档)

智慧旅游平台 目录 基于java的智慧旅游平台设计与实现 一、前言 二、系统功能设计 三、系统实现 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&#xff1a;✌️大厂码农|毕设布道师&#xff0c;阿里云开发…

Windows 编译 FFmpeg 源码详细教程

FFmpeg FFmpeg 是一个开源的多媒体框架,它包括了一整套工具和库,可以用来处理(转码、转换、录制、流式传输等)音频和视频。FFmpeg 支持广泛的音视频格式,并且可以在多种操作系统上运行,包括 Windows、Linux 和 macOS。 FFmpeg 的主要组件包括: ffmpeg:这是一个命令行工…

系统架构设计师-下午案例题(2018年下半年)

1.某文化产业集团委托软件公司开发一套文化用品商城系统,业务涉及文化用品销售、定制、竞拍和点评等板块,以提升商城的信息化建设水平。该软件公司组织项目组完成了需求调研,现已进入到系统架构设计阶段。考虑到系统需求对架构设计决策的影响,项目组先列出了可能影响系统架…