最近想找一下ABAP中有无对JSON解析的支持,在SDN上找了几个FM,可惜支持都不是很好。发现ABAP Object中有一个类是 CL_JAVA_SCRIPT,提供了JS代码,JS文件编译运行的支持,试用了下,发现对一个简单的结构的JSON还是能解析的。代码如下:
DATA: grf_js_engine TYPE REF TO cl_java_script, g_result type string. DATA: grf_ex_root TYPE REF TO cx_root, g_text TYPE string. START-OF-SELECTION. TRY. CALL METHOD cl_java_script=>create EXPORTING stacksize = 8096 heapsize = 640000 RECEIVING ref = grf_js_engine. CATCH cx_dynamic_check INTO grf_ex_root. g_text = grf_ex_root->get_text( ). MESSAGE g_text TYPE 'E'. ENDTRY. call method grf_js_engine->EVALUATE exporting JAVA_SCRIPT = 'var kk = {"name":2,"value":''justin''};' "{tt:[{"name":2,"value":''justin''}]} RECEIVING result = g_result. * TRY. CALL METHOD grf_js_engine->get EXPORTING name = 'kk' receiving RESULT = g_result . * CATCH CX_DYNAMIC_CHECK . * ENDTRY. data: gt_js type JS_PROPERTY_TAB, wa_js type line of JS_PROPERTY_TAB. * TRY. gt_js = grf_js_engine->GET_PROPERTIES_SCOPE_GLOBAL( PROPERTY_PATH = 'kk' ). * CATCH CX_DYNAMIC_CHECK . * ENDTRY. write:'result: ', g_result. loop at gt_js into wa_js. write: / wa_js-name, wa_js-value, wa_js-kind. ENDLOOP. clear gt_js. gt_js = grf_js_engine->GET_PROPERTIES_SCOPE_GLOBAL( PROPERTY_PATH = 'kk' ). * CATCH CX_DYNAMIC_CHECK . * ENDTRY. loop at gt_js into wa_js. write: / wa_js-name, wa_js-value, wa_js-kind. ENDLOOP.
PS:如果JSON中嵌套有数组,目前没有找出解析的路径是什么,FT。