Fix filter walk order for arrays (based on array index) (#1261)
Some checks failed
build_downport / build_downport (push) Has been cancelled

* Fix filter walk order for arrays

Fix filter walk order for arrays (based on array index)

* removed empty line
This commit is contained in:
Christian 2024-07-09 15:39:47 +02:00 committed by GitHub
parent cda48f9db7
commit c47f9ee7c1
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 39 additions and 2 deletions

View File

@ -1800,8 +1800,13 @@ class lcl_filter_runner implementation.
method walk.
data ls_node type z2ui5_if_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 = z2ui5_if_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 z2ui5_if_ajson_types=>node_type-boolean or z2ui5_if_ajson_types=>node_type-null
or z2ui5_if_ajson_types=>node_type-number or z2ui5_if_ajson_types=>node_type-string.

View File

@ -4347,15 +4347,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 = z2ui5_cl_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