/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 :/.
'ABAP > Function|Class' 카테고리의 다른 글
[Function] FI_ITEMS_MASS_CHANGE - 회계전표 품목 변경(FB09) (0) | 2023.07.10 |
---|---|
[Class] CL_GUI_FRONTEND_SERVICES=>GET_SCREENSHOT (0) | 2023.07.03 |
[Function] BP_JOBLOG_READ - 백그라운드 작업 로그 조회 (0) | 2023.06.26 |
[Function] GET_JOB_RUNTIME_INFO - 현재 백그라운드 작업 정보 (0) | 2023.06.26 |
[Function] BP_JOB_DELETE - 백그라운드 작업 삭제 (0) | 2023.06.22 |
댓글