From 1269360946d0625b2b671bc3171b01d0d6a96c9d Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 9 Jul 2024 21:22:13 +0200 Subject: [PATCH] ajson, Automatic Update (#6977) Co-authored-by: larshp Co-authored-by: Lars Hvam --- .../zcl_abapgit_ajson.clas.locals_imp.abap | 9 +- .../zcl_abapgit_ajson.clas.testclasses.abap | 214 +++++++++++++++++- 2 files changed, 221 insertions(+), 2 deletions(-) diff --git a/src/json/zcl_abapgit_ajson.clas.locals_imp.abap b/src/json/zcl_abapgit_ajson.clas.locals_imp.abap index b206349a4..b05631de3 100644 --- a/src/json/zcl_abapgit_ajson.clas.locals_imp.abap +++ b/src/json/zcl_abapgit_ajson.clas.locals_imp.abap @@ -896,6 +896,8 @@ CLASS lcl_json_to_abap IMPLEMENTATION. IF is_parent_type-tab_item_buf IS NOT BOUND. " Indirect hint that table was srt/hsh, see get_node_type APPEND INITIAL LINE TO REFERENCE INTO lr_target_field. ASSERT sy-subrc = 0. + ELSE. + CLEAR . ENDIF. WHEN lif_kind=>struct_flat OR lif_kind=>struct_deep. @@ -1809,8 +1811,13 @@ CLASS lcl_filter_runner IMPLEMENTATION. METHOD walk. DATA ls_node TYPE zif_abapgit_ajson_types=>ty_node. + DATA lv_tab_key TYPE string. - LOOP AT mr_source_tree->* INTO ls_node WHERE path = iv_path. + IF cs_parent-type = zif_abapgit_ajson_types=>node_type-array. + lv_tab_key = 'array_index'. " path + index + ENDIF. + + LOOP AT mr_source_tree->* INTO ls_node USING KEY (lv_tab_key) WHERE path = iv_path. CASE ls_node-type. WHEN zif_abapgit_ajson_types=>node_type-boolean OR zif_abapgit_ajson_types=>node_type-null OR zif_abapgit_ajson_types=>node_type-number OR zif_abapgit_ajson_types=>node_type-string. diff --git a/src/json/zcl_abapgit_ajson.clas.testclasses.abap b/src/json/zcl_abapgit_ajson.clas.testclasses.abap index e3b846c36..44f28ff91 100644 --- a/src/json/zcl_abapgit_ajson.clas.testclasses.abap +++ b/src/json/zcl_abapgit_ajson.clas.testclasses.abap @@ -1466,6 +1466,21 @@ CLASS ltcl_json_to_abap DEFINITION METHODS to_abap_str_to_packed FOR TESTING RAISING cx_static_check. + METHODS to_abap_compressed_stdrd + FOR TESTING + RAISING cx_static_check. + METHODS to_abap_compressed_stdrd_key + FOR TESTING + RAISING cx_static_check. + METHODS to_abap_compressed_sort + FOR TESTING + RAISING cx_static_check. + METHODS to_abap_compressed_sort_unique + FOR TESTING + RAISING cx_static_check. + METHODS to_abap_compressed_hash + FOR TESTING + RAISING cx_static_check. ENDCLASS. CLASS zcl_abapgit_ajson DEFINITION LOCAL FRIENDS ltcl_json_to_abap. @@ -2189,6 +2204,171 @@ CLASS ltcl_json_to_abap IMPLEMENTATION. ENDMETHOD. + METHOD to_abap_compressed_stdrd. + + TYPES: BEGIN OF ty_foo_bar, + foo TYPE string, + bar TYPE string, + END OF ty_foo_bar. + + DATA lt_foo_bar TYPE STANDARD TABLE OF ty_foo_bar. + DATA ls_foo_bar LIKE LINE OF lt_foo_bar. + DATA lo_ajson TYPE REF TO zcl_abapgit_ajson. + DATA lv_json TYPE string. + + lv_json = + '[' && + ' {' && + ' "foo": "abc",' && + ' "bar": "123"' && + ' },' && + ' {' && + ' "foo": "cde"' && + ' }' && + ']'. + + lo_ajson = zcl_abapgit_ajson=>parse( lv_json ). + + lo_ajson->to_abap( IMPORTING ev_container = lt_foo_bar ). + + READ TABLE lt_foo_bar WITH KEY foo = 'cde' INTO ls_foo_bar. + + cl_abap_unit_assert=>assert_initial( act = ls_foo_bar-bar ). + + ENDMETHOD. + + METHOD to_abap_compressed_stdrd_key. + + TYPES: BEGIN OF ty_foo_bar, + foo TYPE string, + bar TYPE string, + END OF ty_foo_bar. + + DATA lt_foo_bar TYPE STANDARD TABLE OF ty_foo_bar WITH NON-UNIQUE KEY foo. + DATA ls_foo_bar LIKE LINE OF lt_foo_bar. + DATA lo_ajson TYPE REF TO zcl_abapgit_ajson. + DATA lv_json TYPE string. + + lv_json = + '[' && + ' {' && + ' "foo": "abc",' && + ' "bar": "123"' && + ' },' && + ' {' && + ' "foo": "cde"' && + ' }' && + ']'. + + lo_ajson = zcl_abapgit_ajson=>parse( lv_json ). + + lo_ajson->to_abap( IMPORTING ev_container = lt_foo_bar ). + + READ TABLE lt_foo_bar WITH KEY foo = 'cde' INTO ls_foo_bar. + + cl_abap_unit_assert=>assert_initial( act = ls_foo_bar-bar ). + + ENDMETHOD. + + METHOD to_abap_compressed_sort. + + TYPES: BEGIN OF ty_foo_bar, + foo TYPE string, + bar TYPE string, + END OF ty_foo_bar. + + DATA lt_foo_bar TYPE SORTED TABLE OF ty_foo_bar WITH NON-UNIQUE KEY foo. + DATA ls_foo_bar LIKE LINE OF lt_foo_bar. + DATA lo_ajson TYPE REF TO zcl_abapgit_ajson. + DATA lv_json TYPE string. + + lv_json = + '[' && + ' {' && + ' "foo": "abc",' && + ' "bar": "123"' && + ' },' && + ' {' && + ' "foo": "cde"' && + ' }' && + ']'. + + lo_ajson = zcl_abapgit_ajson=>parse( lv_json ). + + lo_ajson->to_abap( IMPORTING ev_container = lt_foo_bar ). + + READ TABLE lt_foo_bar WITH KEY foo = 'cde' INTO ls_foo_bar. + + cl_abap_unit_assert=>assert_initial( act = ls_foo_bar-bar ). + + ENDMETHOD. + + METHOD to_abap_compressed_sort_unique. + + TYPES: BEGIN OF ty_foo_bar, + foo TYPE string, + bar TYPE string, + END OF ty_foo_bar. + + DATA lt_foo_bar TYPE SORTED TABLE OF ty_foo_bar WITH UNIQUE KEY foo. + DATA ls_foo_bar LIKE LINE OF lt_foo_bar. + DATA lo_ajson TYPE REF TO zcl_abapgit_ajson. + DATA lv_json TYPE string. + + lv_json = + '[' && + ' {' && + ' "foo": "abc",' && + ' "bar": "123"' && + ' },' && + ' {' && + ' "foo": "cde"' && + ' }' && + ']'. + + lo_ajson = zcl_abapgit_ajson=>parse( lv_json ). + + lo_ajson->to_abap( IMPORTING ev_container = lt_foo_bar ). + + READ TABLE lt_foo_bar WITH KEY foo = 'cde' INTO ls_foo_bar. + + cl_abap_unit_assert=>assert_initial( act = ls_foo_bar-bar ). + + ENDMETHOD. + + METHOD to_abap_compressed_hash. + + TYPES: BEGIN OF ty_foo_bar, + foo TYPE string, + bar TYPE string, + END OF ty_foo_bar. + + DATA lt_foo_bar TYPE HASHED TABLE OF ty_foo_bar WITH UNIQUE KEY foo. + DATA ls_foo_bar LIKE LINE OF lt_foo_bar. + DATA lo_ajson TYPE REF TO zcl_abapgit_ajson. + DATA lv_json TYPE string. + + lv_json = + '[' && + ' {' && + ' "foo": "abc",' && + ' "bar": "123"' && + ' },' && + ' {' && + ' "foo": "cde"' && + ' }' && + ']'. + + lo_ajson = zcl_abapgit_ajson=>parse( lv_json ). + + lo_ajson->to_abap( IMPORTING ev_container = lt_foo_bar ). + + READ TABLE lt_foo_bar WITH KEY foo = 'cde' INTO ls_foo_bar. + + cl_abap_unit_assert=>assert_initial( act = ls_foo_bar-bar ). + + ENDMETHOD. + ENDCLASS. ********************************************************************** @@ -4408,15 +4588,47 @@ CLASS ltcl_filter_test IMPLEMENTATION. lo_json->push( iv_path = '/' iv_val = 'b' ). + lo_json->push( + iv_path = '/' + iv_val = 'c' ). + lo_json->push( + iv_path = '/' + iv_val = 'd' ). + lo_json->push( + iv_path = '/' + iv_val = 'e' ). + lo_json->push( + iv_path = '/' + iv_val = 'f' ). + lo_json->push( + iv_path = '/' + iv_val = 'g' ). + lo_json->push( + iv_path = '/' + iv_val = 'h' ). + lo_json->push( + iv_path = '/' + iv_val = 'i' ). + lo_json->push( + iv_path = '/' + iv_val = 'j' ). lo_json_filtered = zcl_abapgit_ajson=>create_from( ii_source_json = lo_json ii_filter = me ). CREATE OBJECT lo_nodes_exp. - lo_nodes_exp->add( ' | |array | | |2' ). + lo_nodes_exp->add( ' | |array | | |10' ). lo_nodes_exp->add( '/ |1 |str |a |1|0' ). lo_nodes_exp->add( '/ |2 |str |b |2|0' ). + lo_nodes_exp->add( '/ |3 |str |c |3|0' ). + lo_nodes_exp->add( '/ |4 |str |d |4|0' ). + lo_nodes_exp->add( '/ |5 |str |e |5|0' ). + lo_nodes_exp->add( '/ |6 |str |f |6|0' ). + lo_nodes_exp->add( '/ |7 |str |g |7|0' ). + lo_nodes_exp->add( '/ |8 |str |h |8|0' ). + lo_nodes_exp->add( '/ |9 |str |i |9|0' ). + lo_nodes_exp->add( '/ |10 |str |j |10|0' ). cl_abap_unit_assert=>assert_equals( act = lo_json_filtered->mt_json_tree