J'ai deux types de JSON: J'essaie de désagréaliser ces deux Json à ma structure interne, mais il y a un problème. p> uniquement pour Quelqu'un peut-il m'aider à résoudre Mon problème ou indiquer mon erreur? P> Voici mon JSON: P> résultat code> et
Erreur code>.
résultat code> La fonction fonctionne correctement, pour
erreur code> la structure est toujours vide. p>
DATA go_textedit TYPE REF TO cl_gui_textedit.
PARAMETERS: json TYPE string.
AT SELECTION-SCREEN OUTPUT.
IF go_textedit IS NOT BOUND.
CREATE OBJECT go_textedit
EXPORTING
parent = cl_gui_container=>screen0.
go_textedit->set_textstream( json ).
ENDIF.
AT SELECTION-SCREEN.
go_textedit->get_textstream( IMPORTING text = json ).
cl_gui_cfw=>flush( ).
TYPES: BEGIN OF stt_result,
to TYPE string,
id TYPE string,
code TYPE string,
END OF stt_result.
TYPES: BEGIN OF stt_error,
name TYPE string,
date TYPE string,
id TYPE string,
descr TYPE string,
result TYPE string,
END OF stt_error.
DATA: BEGIN OF ls_response_result,
result TYPE STANDARD TABLE OF stt_result,
error TYPE STANDARD TABLE OF stt_error,
END OF ls_response_result.
/ui2/cl_json=>deserialize( EXPORTING json = lv_cdata
pretty_name = /ui2/cl_json=>pretty_mode-camel_case
CHANGING data = ls_response_result ).
3 Réponses :
Réviser vos déclarations de type. Il y a une divergence dans un endroit où vous vous attendez à un résultat en tant que matrice JSON (table ABAP) contre un objet JSON (structure ABAP).
Ceci est le code complet que j'ai utilisé: p> vérifié avec la classe d'essai: p>
Malheureusement ça ne marche pas. Ma structure de résultat est toujours vide.
Partagé mon code complet comme référence. Cela vous aide peut-être à déterminer ce qui est différent?
Merci à tous pour votre conseil.
Je résolvai mon problème. P>
Le cas était:
Je reçois du fournisseur deux types de JSON: Je ne peux pas les obtenir tous les deux en même temps. P > J'ai besoin de les désérialiser à ma structure interne. p> et p> voici mon code ABAP nécessaire , qui fonctionne correctement. P> PS: Mon erreur était que j'ai travaillé avec résultat code> ou
error code>. P>
erreur code> comme avec une table interne au lieu de la structure. P>
TYPES: BEGIN OF stt_result,
to TYPE string,
id TYPE string,
code TYPE string,
END OF stt_result.
TYPES lt_data TYPE STANDARD TABLE OF string WITH EMPTY KEY.
TYPES: BEGIN OF stt_error,
name TYPE string,
date TYPE lt_data,
id TYPE string,
descr TYPE string,
result TYPE stt_result,
END OF stt_error.
DATA: BEGIN OF ls_response_result,
result TYPE STANDARD TABLE OF stt_result,
error TYPE stt_error,
END OF ls_response_result.
/ui2/cl_json=>deserialize( EXPORTING json = lv_cdata
pretty_name = /ui2/cl_json=>pretty_mode-camel_case
CHANGING data = ls_response_result ).
Je ne vois pas le besoin de poster tout le code. La seule erreur de votre code est que vous avez essayé de mapper un objet JSON avec une table interne ABAP, mais elle peut être mappée que par une structure ABAP (et une matrice JSON ne peut être mappée que par une table interne ABAP). Permettez-moi de poster une réponse qui est plus concise.
Je t'ai eu, Sandra. J'ai corrigé mon code ABAP et partage ma solution, déjà. Merci pour vos conseils et vos commentaires.
Un objet JSON Un tableau JSON dans votre code, l'erreur Vous devriez donc Corrigez la variable ABAP en supprimant le tableau {...} code> ne peut être mappé que par une structure ABAP.
[...] code> ne peut être mappé que par une table interne ABAP. p>
code> JSON est un objet JSON, mais la variable ABAP est une table interne. P>
standard de code> de sorte qu'il devient une structure: p>
N'a pas essayé votre code, car le JSON n'est pas valide (il manque probablement d'un
externe
[ code> et
] code>) et n'est pas fourni dans un format pouvant être copié directement dans un test Rapport (il me manque le
lv_cdata = '\ {... code>.) Veuillez fournir un exemple minimal fonctionner b>. Cependant, votre type
ls_response_result code> me semble tromper, car la valeur derrière la clé
erreur code> dans vos données JSON est un objet / dictionnaire, mais votre type attendait une table / liste / liste .
@konstantin J'ai ajouté la partie manquante du code pour l'OP (j'ai ajouté un écran afin que le Json puisse être collé) afin que vous puissiez le tester.
Désolé mais la date
code> dans votre JSON semble être un tableau (il y a
[] code> là-bas, qui est une matrice vide) non une chaîne, d'ailleurs
résultat code > N'appartient pas à
erreur code> dans votre fichier JSON non plus.
Merci à tous pour vos réponses. L'erreur code> code> constructure ne doit pas appartenir à
résultat code>, c'est pourquoi je les divise en deux constructions d'indépendance. Je veux dire, je ne peux en obtenir qu'une seule d'entre elles,
résultat code> ou
erreur code>.
Ce n'est toujours pas clair. Pouvez-vous modifier votre message et entrer le résultat attendu (éventuellement via un code de test, comme l'a fait Florian)?