Skip to content

Commit 46d7add

Browse files
authored
update latest ajson version (#23)
1 parent 6c82408 commit 46d7add

16 files changed

+1309
-81
lines changed

src/z2ui5_cl_ajson.clas.abap

Lines changed: 67 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
CLASS z2ui5_cl_ajson DEFINITION
22
PUBLIC
3-
CREATE PUBLIC .
3+
CREATE PUBLIC.
44

55
PUBLIC SECTION.
66

7-
INTERFACES z2ui5_if_ajson .
7+
INTERFACES z2ui5_if_ajson.
88

99
ALIASES:
1010
is_empty FOR z2ui5_if_ajson~is_empty,
@@ -57,7 +57,7 @@ CLASS z2ui5_cl_ajson DEFINITION
5757
RETURNING
5858
VALUE(ro_instance) TYPE REF TO z2ui5_cl_ajson
5959
RAISING
60-
z2ui5_cx_ajson_error .
60+
z2ui5_cx_ajson_error.
6161

6262
CLASS-METHODS create_empty " Might be deprecated, prefer using new( ) or create object
6363
IMPORTING
@@ -77,13 +77,14 @@ CLASS z2ui5_cl_ajson DEFINITION
7777
RETURNING
7878
VALUE(ro_instance) TYPE REF TO z2ui5_cl_ajson
7979
RAISING
80-
z2ui5_cx_ajson_error .
80+
z2ui5_cx_ajson_error.
8181

8282
METHODS constructor
8383
IMPORTING
8484
iv_keep_item_order TYPE abap_bool DEFAULT abap_false
8585
iv_format_datetime TYPE abap_bool DEFAULT abap_true
8686
iv_to_abap_corresponding_only TYPE abap_bool DEFAULT abap_false.
87+
8788
CLASS-METHODS new
8889
IMPORTING
8990
iv_keep_item_order TYPE abap_bool DEFAULT abap_false
@@ -92,6 +93,12 @@ CLASS z2ui5_cl_ajson DEFINITION
9293
RETURNING
9394
VALUE(ro_instance) TYPE REF TO z2ui5_cl_ajson.
9495

96+
CLASS-METHODS normalize_path
97+
IMPORTING
98+
iv_path TYPE string
99+
RETURNING
100+
VALUE(rv_path) TYPE string.
101+
95102
PROTECTED SECTION.
96103

97104
PRIVATE SECTION.
@@ -188,14 +195,14 @@ CLASS z2ui5_cl_ajson IMPLEMENTATION.
188195
DATA lr_parent LIKE ir_parent.
189196

190197
READ TABLE mt_json_tree INTO rs_top_node
191-
WITH KEY
198+
WITH TABLE KEY
192199
path = iv_path
193200
name = iv_name.
194201
IF sy-subrc <> 0.
195202
RETURN. " Not found ? nothing to delete !
196203
ENDIF.
197204

198-
DELETE mt_json_tree INDEX sy-tabix. " where path = iv_path and name = iv_name.
205+
DELETE mt_json_tree INDEX sy-tabix. "#EC CI_SORTSEQ where path = iv_path and name = iv_name.
199206

200207
IF rs_top_node-children > 0. " only for objects and arrays
201208
lv_parent_path = iv_path && iv_name && '/*'.
@@ -217,18 +224,14 @@ CLASS z2ui5_cl_ajson IMPLEMENTATION.
217224

218225
METHOD get_item.
219226

220-
FIELD-SYMBOLS <item> LIKE LINE OF mt_json_tree.
221227
DATA ls_path_name TYPE z2ui5_if_ajson_types=>ty_path_name.
222228
ls_path_name = lcl_utils=>split_path( iv_path ).
223229

224230
READ TABLE mt_json_tree
225-
ASSIGNING <item>
231+
REFERENCE INTO rv_item
226232
WITH KEY
227233
path = ls_path_name-path
228234
name = ls_path_name-name.
229-
IF sy-subrc = 0.
230-
GET REFERENCE OF <item> INTO rv_item.
231-
ENDIF.
232235

233236
ENDMETHOD.
234237

@@ -242,6 +245,11 @@ CLASS z2ui5_cl_ajson IMPLEMENTATION.
242245
ENDMETHOD.
243246

244247

248+
METHOD normalize_path.
249+
rv_path = lcl_utils=>normalize_path( iv_path ).
250+
ENDMETHOD.
251+
252+
245253
METHOD parse.
246254

247255
DATA lo_parser TYPE REF TO lcl_json_parser.
@@ -275,7 +283,7 @@ CLASS z2ui5_cl_ajson IMPLEMENTATION.
275283
DO.
276284
lr_node_parent = rr_end_node.
277285
READ TABLE mt_json_tree REFERENCE INTO rr_end_node
278-
WITH KEY
286+
WITH TABLE KEY
279287
path = lv_cur_path
280288
name = lv_cur_name.
281289
IF sy-subrc <> 0. " New node, assume it is always object as it has a named child, use touch_array to init array
@@ -439,7 +447,7 @@ CLASS z2ui5_cl_ajson IMPLEMENTATION.
439447
IF lr_item IS NOT INITIAL AND lr_item->type = z2ui5_if_ajson_types=>node_type-string.
440448
FIND FIRST OCCURRENCE OF REGEX '^(\d{4})-(\d{2})-(\d{2})(T|$)'
441449
IN lr_item->value
442-
SUBMATCHES lv_y lv_m lv_d.
450+
SUBMATCHES lv_y lv_m lv_d ##REGEX_POSIX.
443451
CONCATENATE lv_y lv_m lv_d INTO rv_value.
444452
ENDIF.
445453

@@ -512,6 +520,28 @@ CLASS z2ui5_cl_ajson IMPLEMENTATION.
512520
ENDMETHOD.
513521

514522

523+
METHOD z2ui5_if_ajson~get_timestampl.
524+
525+
DATA lo_to_abap TYPE REF TO lcl_json_to_abap.
526+
DATA lr_item TYPE REF TO z2ui5_if_ajson_types=>ty_node.
527+
528+
lr_item = get_item( iv_path ).
529+
530+
IF lr_item IS INITIAL.
531+
RETURN.
532+
ENDIF.
533+
534+
CREATE OBJECT lo_to_abap.
535+
536+
TRY.
537+
rv_value = lo_to_abap->to_timestampl( lr_item->value ).
538+
CATCH z2ui5_cx_ajson_error.
539+
RETURN.
540+
ENDTRY.
541+
542+
ENDMETHOD.
543+
544+
515545
METHOD z2ui5_if_ajson~is_empty.
516546
rv_yes = boolc( lines( mt_json_tree ) = 0 ).
517547
ENDMETHOD.
@@ -706,7 +736,7 @@ CLASS z2ui5_cl_ajson IMPLEMENTATION.
706736
ENDIF.
707737

708738
IF go_float_regex IS NOT BOUND.
709-
CREATE OBJECT go_float_regex EXPORTING pattern = '^([1-9][0-9]*|0)\.[0-9]+$'.
739+
CREATE OBJECT go_float_regex EXPORTING pattern = '^([1-9][0-9]*|0)\.[0-9]+$' ##REGEX_POSIX.
710740
" expects fractional, because ints are detected separately
711741
ENDIF.
712742

@@ -838,8 +868,28 @@ CLASS z2ui5_cl_ajson IMPLEMENTATION.
838868
ENDMETHOD.
839869

840870

871+
METHOD z2ui5_if_ajson~set_timestampl.
872+
873+
ri_json = me.
874+
875+
DATA lv_timestamp_iso TYPE string.
876+
lv_timestamp_iso = lcl_abap_to_json=>format_timestampl( iv_val ).
877+
878+
z2ui5_if_ajson~set(
879+
iv_ignore_empty = abap_false
880+
iv_path = iv_path
881+
iv_val = lv_timestamp_iso ).
882+
883+
ENDMETHOD.
884+
885+
841886
METHOD z2ui5_if_ajson~slice.
842887

888+
" TODO: idea
889+
" read only mode (for read only jsons or a param)
890+
" which would reuse the original tree, so copy a reference of the tree, presuming that it is not changed
891+
" this will be faster, in particular for array iterations
892+
843893
DATA lo_section TYPE REF TO z2ui5_cl_ajson.
844894
DATA ls_item LIKE LINE OF mt_json_tree.
845895
DATA lv_normalized_path TYPE string.
@@ -865,7 +915,7 @@ CLASS z2ui5_cl_ajson IMPLEMENTATION.
865915

866916
lv_path_pattern = lv_normalized_path && `*`.
867917

868-
LOOP AT mt_json_tree INTO ls_item WHERE path CP lv_path_pattern.
918+
LOOP AT mt_json_tree INTO ls_item WHERE path CP lv_path_pattern. "#EC CI_SORTSEQ
869919

870920
ls_item-path = substring( val = ls_item-path
871921
off = lv_path_len - 1 ). " less closing '/'
@@ -953,7 +1003,8 @@ CLASS z2ui5_cl_ajson IMPLEMENTATION.
9531003
CREATE OBJECT lo_to_abap
9541004
EXPORTING
9551005
iv_corresponding = boolc( iv_corresponding = abap_true OR ms_opts-to_abap_corresponding_only = abap_true )
956-
ii_custom_mapping = mi_custom_mapping.
1006+
ii_custom_mapping = mi_custom_mapping
1007+
ii_refs_initiator = ii_refs_initiator.
9571008

9581009
lo_to_abap->to_abap(
9591010
EXPORTING

0 commit comments

Comments
 (0)