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. C++ 单例模式实现

    #include <iostream> #include <mutex> std::mutex mtx; class Singleton { private: Singleto ...

  2. MyBatis 分页之拦截器实现

    分页是WEB程序中常见的功能,mybatis分页实现与hibernate不同,相比hibernate,mybatis实现分页更为麻烦.mybatis实现分页需要自己编写(非逻辑分页RowBounds) ...

  3. 反射的所有api

    Extension [ extension #17 Reflection version $Id: 1cf65cee164ed57874ce2d29e5c46b82f6139524 $ ] { - C ...

  4. Xdebug调试环境配置

    首先我们需要下载Xdebug 务必根据安装的PHP版本,选择合适的Xdebug版本,由于我是在Windows环境下安装PHP的,选择下载Windows版本的PHP 5.3 VC9 TS (32 bit ...

  5. linux图形化客户端

    很多服务器都用linux 但这些linux都是没有图形化界面的, 一般也不建议在服务器上装图形化界面 我们都知道,维护linux,大部分都是使用命令 那么,为什么不能开发一个应用程序, 把图形化操作转 ...

  6. vue中关于dom的操作

    mounted 个人理解为DOM结构准备就绪了,可以开始加载vue数据了, 挂载点,配合使用 mounted:function(){ this.$nextTick(function(){ //this ...

  7. Java设计模式学习记录-GoF设计模式概述

    前言 最近要开始学习设计模式了,以前是偶尔会看看设计模式的书或是在网上翻到了某种设计模式,就顺便看看,也没有仔细的学习过.前段时间看完了JVM的知识,然后就想着JVM那么费劲的东西都看完了,说明自己学 ...

  8. [转]来扯点ionic3[7] LocalStorage的使用—以登录和注销为例

    本文转自:https://segmentfault.com/a/1190000012146400 一般意义上,一个互联网 APP 中的数据主自与服务器的交互,但是对于有些数据,我们希望获取到它们以后能 ...

  9. ajax读取txt文本时乱码的解决方案

    前言:第一次学习使用 ajax 就是用来读取文本 先给出现乱码的代码<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional/ ...

  10. asp.net mvc之自定义WebViewPage

    采用Razor引擎的View文件最终都会编译成一个WebViewPage类型, 通过自定义WebViewPage,添加相应的属性和方法,你可以很方便的在View里调用, 自定义WebViewPage只 ...