Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Parsing json into data structures with lower case field names

I am parsing JSON into ABAP structures, and it works:

DATA cl_oops TYPE REF TO cx_dynamic_check.
DATA(text) = `{"TEXT":"Hello ABAP, I'm JSON!","CODE":"123"}`.
TYPES: BEGIN OF ty_structure,
         text TYPE string,
         code TYPE char3,
       END OF ty_structure.
DATA : wa_structure TYPE ty_structure.
TRY.
    text = |\{"DATA":{ text }\}|.
    CALL TRANSFORMATION id OPTIONS clear = 'all' 
         SOURCE XML text 
         RESULT data = wa_structure.
    WRITE: wa_structure-text , wa_structure-code.
  CATCH cx_transformation_error INTO cl_oops.
    WRITE cl_oops->get_longtext( ).
ENDTRY.

The interesting part is that the CODE and TEXT are case sensitive. For most external systems, having all CAPS identifiers is ugly, so I have been trying to parse {"text":"Hello ABAP, I'm JSON!","code":"123"} without any success. I looked into the options, I looked whether a changed copy of id migh accomplish this, I googled it and have no idea how to accomplish this.

like image 384
tomdemuyt Avatar asked Mar 17 '23 19:03

tomdemuyt


1 Answers

Turns out that SAP has a sample program on how to do this. There is basically an out of the box transformation that does this for you called demo_json_xml_to_upper. The name is a bit unfortunate, so I would suggest renaming this transformation and adding it to the customer namespace.

I am a bit bummed that this only works through xstrings, so debugging it becomes a pain. But, it works perfeclty and solved my problem.

like image 96
tomdemuyt Avatar answered Mar 20 '23 00:03

tomdemuyt