• ABAP 中JSON格式的转换与解析


    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.

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

    以上就是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类型定义

     
  • 相关阅读:
    2017.10.12
    2017.10.25
    2017.10.24
    进度条06
    课堂练习(返回一个环状一维整数数组中最大子数组的和)
    团队项目成员和题目
    团队作业--四则运算网页版
    进度条04
    个人作业(最大子数组)
    进度条03
  • 原文地址:https://www.cnblogs.com/hhelibeb/p/6617488.html
Copyright © 2020-2023  润新知