¡Caminando hacia el éxito!

Aprende en Comunidad

Avalados por :

Cómo definir un tipo en ABAP para recibir un array de cadenas como una tabla

  • Creado 01/03/2024
  • Modificado 01/03/2024
  • 114 Vistas
0
Cargando...

Hola expertos en ABAP.

Supongamos que tengo los siguientes datos JSON.

{
	"data": "abc",
	"tab": ["a", "b", "c"]
}<br>

Quiero convertir esto a una estructura ABAP de la siguiente manera.

|data |tab   |
|"abc"|3 líneas (primera: "a", segunda: "b, tercera: "c") |

o,

|data |tab   |
|"abc"|"a","b","c" |

Al principio pensé en definir un tipo y usar /ui2/cl_json=>deserialize como se muestra a continuación.

types: begin of ts_json,
  data type string,
  tab type string, "¡esto no es correcto!
end of ts_json.


data(json) = '{ "data": "abc", "tab": ["a", "b", "c"] }'.
data ls_data type ts_json.


/ui2/cl_json=>deserialize(
  exporting json = conv #( json )
  changing data = ls_data
).

Sin embargo, estoy atascado porque el campo "tab" es una tabla de cadenas que no tiene nombres de campo.

Si depuro el código, ls_data-data está lleno pero ls_data-tab está en blanco.

¿Cómo puedo definir un tipo que pueda recibir un array de cadenas como una tabla?

Pedro Pascal
Se unió el 07/03/2018
Pinterest
Telegram
Linkedin
Whatsapp

4 Respuestas

0
Cargando...

Mio san,

I faced a similar problem in the ABAP environment of BTP.

The question and its answer proved to be helpful.

"string_table" type can also be used, so add it.

  METHOD if_oo_adt_classrun~main.

    DATA:
      begin of ls_result,
        data type string,
*        tab  type standard table of string with empty key,
        tab  TYPE string_table,
      end of ls_result.

    DATA(lv_json_string) = |\{\r\n| &
                           |    "data": "abc",\r\n| &
                           |    "tab": ["a", "b", "c"]\r\n| &
                           |\}|.

    xco_cp_json=>data->from_string( lv_json_string )->apply( VALUE #(
      ( xco_cp_json=>transformation->camel_case_to_underscore )
      ( xco_cp_json=>transformation->boolean_to_abap_bool )
    ) )->write_to( REF #( ls_result ) ).

    out->write( ls_result-data ).
    LOOP AT ls_result-tab REFERENCE INTO DATA(lr).
      out->write( lr->* ).
    ENDLOOP.

  ENDMETHOD.

Result.

horitaku_0-1712142408816.png

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

Hola sandra.rossi ,

Gracias por tu pronta respuesta. La línea a continuación es lo que necesitaba.

tab  TYPE STANDARD TABLE OF string WITH EMPTY KEY,
Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

No respondo exactamente a tu pregunta, pero cuando conoces la Transformación Simple y JSON-XML, es fácil:

types: begin of ts_json,
  data type string,
  tab  type standard table of string with empty key,
end of ts_json.
data ls_data type ts_json.

CALL TRANSFORMATION zst SOURCE XML json RESULT root = ls_data.

Transformación simple ZST (parte interesante solamente):

<object tt:ref=".ROOT">
    <str name="data" tt:value-ref="DATA"/>
    <array name="tab">
        <tt:loop ref="TAB">
            <str tt:value-ref="TABLE_LINE"/>
        </tt:loop>
    </array>
</object>

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

No respondo exactamente a tu pregunta, pero cuando conoces la Transformación Simple y JSON-XML, es fácil:

types: begin of ts_json,
  data type string,
  tab  type standard table of string with empty key,
end of ts_json.
data ls_data type ts_json.

CALL TRANSFORMATION zst SOURCE XML json RESULT root = ls_data.

ZST transformación simple (parte interesante solamente):

<object tt:ref=".ROOT">
    <str name="data" tt:value-ref="DATA"/>
    <array name="tab">
        <tt:loop ref="TAB">
            <str tt:value-ref="TABLE_LINE"/>
        </tt:loop>
    </array>
</object>

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019

contacto@primeinstitute.com

(+51) 1641 9379
(+57) 1489 6964

© 2024 Copyright. Todos los derechos reservados.

Desarrollado por Prime Institute

¡Hola! Soy Diana, asesora académica de Prime Institute, indícame en que curso estas interesado, saludos!
Hola ¿Puedo ayudarte?