20240106

JSON <--> ABAP

  METHOD tamplates_1 .

    WRITE:/ '*** tamplates_1 - ' .
    WRITE:/ '*** ' .
    WRITE:/ '*** JSON --> ABAP' .

    DATA v_abap_str TYPE string VALUE 'Isto é uma string ABAP'.


    data(v_writer) = cl_sxml_string_writer=>CREATE(
                           type = if_sxml=>CO_XT_JSON
                     ).

    CALL TRANSFORMATION ID SOURCE text = v_abap_str
      RESULT XML v_writer.


    DATA(v_json) = v_writer->GET_OUTPUT( ).

    cl_demo_output=>DISPLAY_JSON( v_json ).



write: / |    DATA v_abap_str TYPE string VALUE 'Isto é uma string ABAP'. |.
write: / |.|.
write: / |        data(v_writer) = cl_sxml_string_writer=>CREATE( |.
write: / |                               type = if_sxml=>CO_XT_JSON |.
write: / |                         ). |.
write: / |.|.
write: / |        CALL TRANSFORMATION ID SOURCE text = v_abap_str |.
write: / |          RESULT XML v_writer. |.
write: / |.|.
write: / |        DATA(v_json) = v_writer->GET_OUTPUT( ). |.
write: / |.|.
write: / |        cl_demo_output=>DISPLAY_JSON( v_json ). |.




    ULINE.

  ENDMETHOD.










***
***   Exemplo Simples
***
  METHOD tamplates_2 .

    WRITE:/ '*** tamplates_2 - ' .
    WRITE:/ '*** ' .
    WRITE:/ '*** ABAP --> JSON' .
    WRITE:/ '*** ' .

    DATA v_json_str type string VALUE '{"ATTR":"Isto é uma string JSON"}'.

    DATA v_abap_str TYPE string.

    CALL TRANSFORMATION id
      SOURCE XML v_json_str
      RESULT attr = v_abap_str .

    cl_demo_output=>display( |attr={ v_abap_str } | ).


    write:/ |    DATA v_json_str type string VALUE ["ATTR":"Isto é uma string JSON" ]. |.
    write:/ |.|.
    write:/ |    DATA v_abap_str TYPE string.|.
    write:/ |.|.
    write:/ |    CALL TRANSFORMATION id|.
    write:/ |      SOURCE XML v_json_str|.
    write:/ |      RESULT attr = v_abap_str .|.
    write:/ |.|.
    write:/ |    cl_demo_output=>display( attr = [ v_abap_str ]  ).|.


    ULINE.

  ENDMETHOD.







***
*** Literal + expression
***
  METHOD tamplates_3 .

    WRITE:/ '*** tamplates_3 -' .
    WRITE:/ '*** ' .
    WRITE:/ '*** JSON (tabela)' .
    WRITE:/ '*** ' .

    types:
      BEGIN OF y_tp1,
        campo1   type char10,
        campo2   type char20,
      END OF y_tp1.

    data(s1) = VALUE y_tp1(
                  campo1 = 'valor1'
                  campo2 = 'valor2'
               ).


    DATA(v_writer) =
         cl_sxml_string_writer=>create( type = if_sxml=>co_xt_json ).

    CALL TRANSFORMATION id
      SOURCE s1json = s1
      RESULT XML v_writer.

    DATA(v_json) = v_writer->get_output( ).
    cl_demo_output=>display_json( v_json  ).


    ULINE.


  ENDMETHOD.







***
***
***
  METHOD tamplates_4 .

    WRITE:/ '*** tamplates_4 - ' .
    WRITE:/ '*** ' .
    WRITE:/ '*** JSON --> ABAP (tipo complexo)' .
    WRITE:/ '*** ' .


    DATA v_json_str   type string VALUE '{"ATTR1":"valor1","ATTR2":"valor2" }'.

    data v_abap_str   type string .

    CALL TRANSFORMATION id
      SOURCE XML v_json_str
      RESULT attr1 = v_abap_str.

    cl_demo_output=>display( | ATTR1 = { v_abap_str } | ).

    ULINE.

  ENDMETHOD.







***
***
***
  METHOD tamplates_5 .

    WRITE:/ '*** tamplates_5 - '.
    WRITE:/ '*** JSON --> ABAP (tipo complexo 2)' .
    WRITE:/ '*** ' .


    write:/ |    DATA v_json_str   type string VALUE '["JSONS1":["ATTR1":"valor1","ATTR2":"valor2" ]]'. |.

    write:/ |    TYPES: |.
    write:/ |      BEGIN OF y_tp1, |.
    write:/ |        attr1     type char10, |.
    write:/ |        attr2     type char20, |.
    write:/ |      END OF y_tp1. |.

    write:/ |    DATA s1 type y_tp1. |.

    write:/ |    CALL TRANSFORMATION id |.
    write:/ |      SOURCE XML v_json_str |.
    write:/ |      RESULT jsons1 = s1. |.

    write:/ |    cl_demo_output=>display( |.
*    write:/ |    "|",'ATTR1='&&'[ s1-attr1 ]'&&'\nATTR2=[ s1-attr2 ]| |'.
*    write:/ |     ]. |.


    DATA v_json_str   type string VALUE '{"JSONS1":{"ATTR1":"valor1","ATTR2":"valor2" }}'.

    TYPES:
      BEGIN OF y_tp1,
        attr1     type char10,
        attr2     type char20,
      END OF y_tp1.

    DATA s1 type y_tp1.

    CALL TRANSFORMATION id
      SOURCE XML v_json_str
      RESULT jsons1 = s1.

    cl_demo_output=>display(
    |ATTR1={ s1-attr1 }\nATTR2={ s1-attr2 }|
     ).

    ULINE.

  ENDMETHOD.