RT,JSON是当今十分流行的一种轻量数据格式,广泛地应用于各种数据交换场景中。本文会介绍一种比较简单的将ABAP中的数据转换为JSON格式的方法。

(如果你是因为引号的问题搜索到了这篇文章,请直接拉到底部“其它部分”)

本文的正文内容中的转换类cl_trex_json_serializer不建议使用,参看 其他部分

序列化

使用cl_trex_json_serializer类来将结构转为JSON格式:

DATA:
serializer TYPE REF TO cl_trex_json_serializer,
lv_json TYPE string. DATA: BEGIN OF ls_kv,
key1 TYPE string,
value TYPE string,
END OF ls_kv. DATA: lt_kv LIKE HASHED TABLE OF ls_kv WITH UNIQUE KEY key1. ls_kv-key1 = 'key'.
ls_kv-value = '值'.
INSERT ls_kv INTO TABLE lt_kv. CREATE OBJECT serializer
EXPORTING
data = ls_kv. serializer->serialize( ). lv_json = serializer->get_data( ). WRITE / lv_json.

运行这段代码,输出结果,可以得到:

反序列化

使用cl_trex_json_deserializer来实现JSON的解析,代码如下:

DATA: deserializer TYPE REF TO cl_trex_json_deserializer.

CLEAR ls_kv.

CREATE OBJECT deserializer.

deserializer->deserialize(
EXPORTING json = lv_json
IMPORTING abap = ls_kv ). WRITE: / ls_kv-key1, / ,ls_kv-value.

运行程序,可以看到结果:

cl_trex_json_serializer
-->

以上就是ABAP中转换JSON数据的方法。当然,cl_trex_json_serializer与cl_trex_json_deserializer并不是唯一可以使用的类,SAP也为我们提供了CL_FDT_JSON, /UI2/CL_JSON等来进行JSON的序列化与反序列化,关于/UI2/CL_JSON它的更多信息,可以阅读这篇文章:

One more ABAP to JSON Serializer and Deserializer

其它 (/ui2/cl_json)

眼尖的读者也许注意到,这两个对象返回的的JSON是{key: "value"},而规范的JSON应该是{"key": "value"}的格式。如果使用它们来解析{"key": "value"}的话,会因为双引号的问题导致出现异常,解析失败。在这种情况下,推荐使用/UI2/CL_JSON:

types: begin of t_record,
key1 type string,
key2 type string,
end of t_record. data: json type string.
data: record type t_record. json = '{"key1": "VALUE1", "key2": "VALUE2"}'. /ui2/cl_json=>deserialize( exporting json = json changing data = record ).

某些系统中可能没有安装相应的Add-on(UI2 Add-on,可以应用的版本是 SAP_BASIS 700 – 76X),因此找不到/UI2/CL_JSON类,我提取了相关代码:ZUI2_JSON.zip,可以点击下载,直接复制到系统中使用。也可以使用abapgit安装。

本文链接:http://www.cnblogs.com/hhelibeb/p/6617488.html

(本来想写下最近学到的使用post方法调用restful api的方法,然而搜索一下发现这些百度也可以搜到..。所以后面就不继续了。

参考阅读:One more ABAP to JSON Serializer and Deserializer

      JSON2ABAPType:根据JSON数据结构生成ABAP类型定义

 

ABAP 中JSON格式的转换与解析的更多相关文章

  1. Delphi中Json格式读写

    Json是一种轻量级传输数据格式,广泛应用互联网和各应用中.json主要採用键值对来表示数据项.多个数据项之间用逗号分隔,也能够用于数组.以下注重介绍一下在delphi中使用json,在delphi中 ...

  2. 关于http接口开发中json格式数据编码问题处理

    关于http接口开发中json格式数据编码问题处理 在实际工作中,接口很多时候返回json格式,但有时返回的格式会有编码问题 假设如下接口:http://service.test.com/interf ...

  3. Unity 数据Json格式的转换

    把对象转换为字节序列的过程称为对象的序列化. 把字节序列化恢复为对象过程称为对象的反序列化. JSON格式的转换,是一大神给我说的,让我拿来存储数据库时对一些数据的处理,感觉特别好用.但是我并没有深入 ...

  4. JavaBean到JSon格式的转换例子的代码

    内容过程,把做工程过程较好的内容片段备份一次,如下的内容是关于 JavaBean到JSon格式的转换例子的内容,应该对各朋友有一些用处. User u = new User(); u.setId(1) ...

  5. python中json格式数据输出实现方式

    python中json格式数据输出实现方式 主要使用json模块,直接导入import json即可. 小例子如下: #coding=UTF-8 import json info={} info[&q ...

  6. Go net/http获取body中json格式数据

    Go net/http获取body中json格式数据 package main import ( "encoding/json" "fmt" "io/ ...

  7. js中实现json格式的转换

    function person(id,name,age){ this.id=id; this.name=name; this.age=age; } var p=new person(1001,'tom ...

  8. Python-字符串str和json格式的转换

    str转json str转换为json格式,前提一定需要保证这个str的格式和json是一致的,即左边最外层是大括号,右边的最外层是大括号.如果不一致,推荐用正则进行拆分至和json格式一致1. 通过 ...

  9. SpringMVC前后台数据传递中Json格式的相互转换(前台显示格式、Json-lib日期处理)及Spring中的WebDataBinder浅析

    两个方向: 一.前台至后台: Spring可以自动封装Bean,也就是说可以前台通过SpringMVC传递过来的属性值会自动对应到对象中的属性并封装成javaBean,但是只能是基本数据类型(int, ...

随机推荐

  1. AOP技术基础(转)

    1.引言 2.AOP技术基础 3.Java平台AOP技术研究 4..Net平台AOP技术研究 2.1 AOP技术起源 AOP技术的诞生并不算晚,早在1990年开始,来自Xerox Palo Alto ...

  2. php递归操作目录 递归对参数转义

    header("Content-type:text/html;charset=utf-8"); //递归读取目录 function reddir($path,$level=0) { ...

  3. Xshell6设置字体大小

    Xshell可以远程连接到linux服务器,但有时终端字体太小,可以按照如下步骤修改字体大小: 菜单栏: 文件-属性-外观,修改字体大小后点击确定即可(也可以使用ALT+P快捷键打开属性).

  4. Shell 文件测试运算符

    文件测试运算符 文件测试运算符用于检测 Unix 文件的各种属性. 属性检测描述如下: 操作符 说明 举例 -b file 检测文件是否是块设备文件,如果是,则返回 true. [ -b $file ...

  5. .net core Identity集成IdentityServer(2) 实现IprofileService接口在accesstoken中增加自定义claims

    导读 1. 如何添加自定义的claims. 前请提要 目前我们拥有了三个web应用. localhost:40010, 验证服务器 localhost:40011, mvc客户端, 充当webapp请 ...

  6. SQL SERVER GO命令循环使用实例

    通过GO  命令 来达到语句循环效果  也叫批循环 print '输出10次' 也可用来新增 语句 NOCOUNT ON 用来屏蔽 新增语句输出的影响行数 我们只看循环次数 SET NOCOUNT O ...

  7. WebForm 【上传图片--添加水印】

      对图片添加水印,上传 <div> <asp:FileUpload ID="FileUpload1" runat="server" /> ...

  8. 【Quartz】问题记录注意事项【四】

    记录一:queartz 在同时启动多个任务是,触发器名称不能设置一致,不然第二次启动会不成功 记录二:quartz 在使用任务与触发器分离写法时,任务必须要带(.StoreDurably()) IJo ...

  9. 修改Mysql字符集

    第一种 一.修改my.ini配置文件(MySQL配置文件) character_set_server = utf8 #设置字符集 重启mysql数据库服务 查看当前数据库字符集 show VARIAB ...

  10. Java基础——Oracle(二)

    一.Oracle 中的几个服务 1.OracleDBConsoleorcl 进程:nmesrvc.exe oem控制台服务进程,dba用.Oracle Enterprise Manager(Oracl ...