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. Linux下rsync daemon模式下的错误汇总

    一.前言:最近学习服务环境搭建,遇到了许多大大小小的问题,不过还好,经过我的一通努力终于都解决了,所以分享出来给自己留个纪念,同时也希望能帮助学习中的朋友. 二.环境:两台服务器环境相同 1 [roo ...

  2. Linux给命令设置别名

    查看命令别名:alias alias 设置命令别名:alias 别名='命令' alias ll='ls -l' 取消命令别名:unalias 别名 unalias ll 命令永久生效 上面直接在sh ...

  3. 设计模式教程(Design Patterns Tutorial)笔记之三 行为型模式(Behavioral Patterns)

    目录 · Strategy · When to use the Strategy Design Pattern? · Sample Code · Observer · When to use the  ...

  4. 【NET CORE微服务一条龙应用】第二章 配置中心使用

    背景 系列目录:[NET CORE微服务一条龙应用]开始篇与目录 在分布式或者微服务系统里,通过配置文件来管理配置内容,是一件比较令人痛苦的事情,再谨慎也有湿鞋的时候,这就是在项目架构发展的过程中,配 ...

  5. ubantu 安装杀毒软件 clamav

    前言: 搜索了一番安装杀毒软件的教程, 但是多有残缺不全的, 所以整理一下,以作记录 1. 添加用户 groupadd clamav useradd -g clamav -s /bin/false - ...

  6. ZooKeeper概念与应用

    Zookeeper是开源的分布式协调服务,提供了分布式数据一致性的解决方案. Zookeeper 可用作配置中心和分布式锁服务,在 Dubbo.Kafka.Spark等分布式集群上得到广泛应用. ZN ...

  7. 多继承之MRO

    一,python2和python3的区别 在python2中存在两种类:一个叫经典类,在python2.2之前,一直用的是经典类,经典类如果在基类的根什么都不写,那么它就是根:还有一个叫新式类,在py ...

  8. WPF Application 类介绍以及怎样修改启动方式

    因为想要修改wpf的启动方式,所以研究了下Application类,现把一些有用的属性与大家分享下: 属性: Current                  获取当前 AppDomain的 Appl ...

  9. 4.移植uboot-使uboot支持DM9000网卡

    在上一章,使uboot能够支持nor.nand 本节继续修改让uboot支持DM9000C网卡,便可以通过网络来传输文件 首先uboot已带有dm9000网卡的驱动,位于drivers/net/下的d ...

  10. MEF 插件式开发之 DotNetCore 中强大的 DI

    背景叙述 在前面几篇 MEF 插件式开发 系列博客中,我分别在 DotNet Framework 和 DotNet Core 两种框架下实验了 MEF 的简单实验,由于 DotNet Framewor ...