ABAP 解析压缩转义的JSON 字符串 方法

需要解析的压缩转义JSON字符串

 '{\"KEY1\":\"test01\",\"KEY2\":\"test02\",\"KEY3\":\"test03\"}'

解析到结构

KEY1    1 Types    /SCMTMS/STRING    STRING    0    0    0    String
KEY2    1 Types    /SCMTMS/STRING    STRING    0    0    0    String
KEY3    1 Types    /SCMTMS/STRING    STRING    0    0    0    String

如下完整代码:

DATA lv_json             TYPE string VALUE '{\"KEY1\":\"test01\",\"KEY2\":\"test02\",\"KEY3\":\"test03\"}'.
DATA lv_json1            TYPE string .
DATA lv_json_z           TYPE string.
DATA ls_output           TYPE zls_test.
* '{"data":"{\"KEY1\":\"ztest01\",\"KEY2\":\"ztest02\",\"KEY3\":\"ztest03\"}"}'
lv_json1 = '{' && '"' && 'data' && '"' && ':' && '"' && lv_json && '"'  && '}'.

lv_json_z = lv_json1.

TYPES:BEGIN OF ty_temp,
        data TYPE string,
      END OF ty_temp.
DATA:lv_json_temp TYPE ty_temp.

/ui2/cl_json=>deserialize(
  EXPORTING
    json             = lv_json_z
*    jsonx            = jsonx
*    pretty_name      = PRETTY_MODE-NONE
*    assoc_arrays     = C_BOOL-FALSE
*    assoc_arrays_opt = C_BOOL-FALSE
*    name_mappings    = name_mappings
*    conversion_exits = C_BOOL-FALSE
  CHANGING
    data             = lv_json_temp
       ).

/ui2/cl_json=>deserialize(
  EXPORTING
    json             = lv_json_temp-data
  CHANGING
    data             = ls_output
       ).

BREAK-POINT.

WRITE 'S'.

需要定义一个中间结构ty_temp转换一下,直接解析两次即可。

你可能感兴趣的:(ABAP,json,开发语言)