본문 바로가기
ABAP/Function|Class

[Class] /UI2/CL_JSON=>SERIALIZE, DESERIALIZE

by name_text 2023. 6. 28.

/UI2/CL_JSON

/UI2/CL_JSON=>SERIALIZE

/UI2/CL_JSON=>DESERIALIZE

 

SAP에서 JSON Parsing

 

#1. 사용예시

Importing 파라미터로 여러가지를 제공하니 해당 Class의 Serialize, Deserialize Method를 먼저 확인 한 후 개발에 활용하길 권장합니다.

Pretty_mode 는 여러가지가 있지만, 아래 3가지를 가장 많이 사용합니다.

/UI2/CL_JSON=>PRETTY_MODE-NONE ABAP 필드명 그대로 대문자로 JSON 키 설정
/UI2/CL_JSON=>PRETTY_MODE-LOW_CASE ABAP 필드명을 단순히 소문자로만 변경
/UI2/CL_JSON=>PRETTY_MODE-CAMEL_CASE CamelCase 형식에 맞추어 변경
* JSON Serialize
  CALL METHOD /UI2/CL_JSON=>SERIALIZE
    EXPORTING
      DATA             = ls_tmp       "ABAP 데이터
      COMPRESS         = ABAP_FALSE   "값이 없는 항목은 제외 여부
      PRETTY_NAME      = /UI2/CL_JSON=>PRETTY_MODE-CAMEL_CASE
      CONVERSION_EXITS = ABAP_FALSE   "변환 루틴 적용 여부
    RECEIVING
      R_JSON           = lv_json      "JSON
      .
  
* JSON Deserialize
  CALL METHOD /UI2/CL_JSON=>DESERIALIZE
    EXPORTING
      JSON             = lv_json      "JSON
      PRETTY_NAME      = /UI2/CL_JSON=>PRETTY_MODE-CAMEL_CASE
      CONVERSION_EXITS = ABAP_FALSE   "변환 루틴 적용 여부
    CHANGING
      DATA             = ls_tmp       "ABAP 데이터
      .

 

#2. Pretty_mode의 low_case 와 camel_case 차이

TYPES : BEGIN OF T_TMP,
  LIFNR TYPE LFA1-LIFNR,
  VALUE01 TYPE STRING,
  ADRNR TYPE LFA1-ADRNR,
  IN_T01 TYPE I,
  VALUE02 TYPE STRING,
  END OF T_TMP.

DATA : LS_TMP  TYPE T_TMP,
       LV_JSON TYPE STRING.

select SINGLE
  lifnr,
  adrnr,
  112 as in_t01
from lfa1
  into CORRESPONDING FIELDS OF @LS_TMP.

* JSON Serialize
  WRITE :/ 'LOW_CASE - 전체 필드'.
  CALL METHOD /UI2/CL_JSON=>SERIALIZE
    EXPORTING
      DATA             = ls_tmp       "ABAP 데이터
      COMPRESS         = ABAP_FALSE   "값이 없는 항목은 제외 여부
      PRETTY_NAME      = /UI2/CL_JSON=>PRETTY_MODE-LOW_CASE
      CONVERSION_EXITS = ABAP_FALSE   "변환 루틴 적용 여부
    RECEIVING
      R_JSON           = lv_json      "JSON
      .
  WRITE :/ lv_json.
  WRITE :/.

  WRITE :/ 'CAMEL_CASE - 전체 필드'.
  CALL METHOD /UI2/CL_JSON=>SERIALIZE
    EXPORTING
      DATA             = ls_tmp
      COMPRESS         = ABAP_FALSE
      PRETTY_NAME      = /UI2/CL_JSON=>PRETTY_MODE-CAMEL_CASE
      CONVERSION_EXITS = ABAP_FALSE
    RECEIVING
      R_JSON           = lv_json
      .
  WRITE :/ lv_json.
  WRITE :/.

 

#3. Compress, Conversion_exits

Compress 파라미터를 통해 값이 없는 항목은 제외하여 JSON 사이즈를 줄일수 있습니다.

Convertion_exits 파라미터를 통해 Domain에 설정된 변환루틴을 적용하여 Serialize/Deserialize 할수 있습니다.

TYPES : BEGIN OF T_TMP,
  LIFNR TYPE LFA1-LIFNR,
  VALUE01 TYPE STRING,
  ADRNR TYPE LFA1-ADRNR,
  IN_T01 TYPE I,
  VALUE02 TYPE STRING,
  END OF T_TMP.

DATA : LS_TMP  TYPE T_TMP,
       LV_JSON TYPE STRING.

select SINGLE
  lifnr,
  adrnr,
  112 as in_t01
from lfa1
  into CORRESPONDING FIELDS OF @LS_TMP.

* JSON Serialize
  WRITE :/ 'LOW_CASE - 전체 필드'.
  CALL METHOD /UI2/CL_JSON=>SERIALIZE
    EXPORTING
      DATA             = ls_tmp       "ABAP 데이터
      COMPRESS         = ABAP_FALSE   "값이 없는 항목은 제외 여부
      PRETTY_NAME      = /UI2/CL_JSON=>PRETTY_MODE-LOW_CASE
      CONVERSION_EXITS = ABAP_FALSE   "변환 루틴 적용 여부
    RECEIVING
      R_JSON           = lv_json      "JSON
      .
  WRITE :/ lv_json.
  WRITE :/.

  WRITE :/ 'LOW_CASE - 값존재 필드만'.
  CALL METHOD /UI2/CL_JSON=>SERIALIZE
    EXPORTING
      DATA             = ls_tmp
      COMPRESS         = ABAP_TRUE
      PRETTY_NAME      = /UI2/CL_JSON=>PRETTY_MODE-LOW_CASE
      CONVERSION_EXITS = ABAP_FALSE
    RECEIVING
      R_JSON           = lv_json
      .
  WRITE :/ lv_json.
  WRITE :/.

  WRITE :/ 'LOW_CASE - 변환 루틴 적용'.
  CALL METHOD /UI2/CL_JSON=>SERIALIZE
    EXPORTING
      DATA             = ls_tmp
      COMPRESS         = ABAP_FALSE
      PRETTY_NAME      = /UI2/CL_JSON=>PRETTY_MODE-LOW_CASE
      CONVERSION_EXITS = ABAP_TRUE
    RECEIVING
      R_JSON           = lv_json
      .
  WRITE :/ lv_json.
  WRITE :/.

 

댓글