[11.2] le bon usage de la fonction: TJson.JsonToObject
Bonjour,
Toujours dans les joies de la manipulation des fichiers JSON, je n'arrive pas a obtenir des résultats avec la fonction: TJson.JsonToObject.
Voici mon code qui ne plante pas mais ne crée pas les données récupérer depuis une URL!
Source JSON:
Code:
1 2
|
{"Tables":[{"Nom":"Colonies","Libelle":"Les colonies"},{"Nom":"Cr\u00e9atures","Libelle":"Les cr\u00e9atures"},{"Nom":"G\u00e9n\u00e9ticiens","Libelle":"Les g\u00e9n\u00e9ticiens"},{"Nom":"Lieux","Libelle":"Les lieux"},{"Nom":"Mercenaires","Libelle":"les mercenaires"},{"Nom":"Nations","Libelle":"Les nations"},{"Nom":"Navires","Libelle":"Les navires"},{"Nom":"Personnages","Libelle":"Les personnages"},{"Nom":"Pirates","Libelle":"Les pirates"},{"Nom":"Rep\u00e8res","Libelle":"Les rep\u00e8res"},{"Nom":"Soci\u00e9t\u00e9s","Libelle":"Les soci\u00e9t\u00e9s"},{"Nom":"Surfaces","Libelle":"La surface"},{"Nom":"Villes","Libelle":"Les villes"}]} |
Et voici le source qui ne plante pas pas qui ne rempli pas mon Object: TAtlasListe
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
|
TAtlasTable = class
[JSONName('Nom')] Nom : string;
[JSONName('Libelle')] Libelle: string;
end;
TAtlasListe = class
[JSONName('Tables')] AtlasListe: TArray<TAtlasTable>;
end;
TThread.CreateAnonymousThread(
procedure
var
LData: string;
LRetour: string;
LStatus: Integer;
LClient: THTTPClient;
LReponse: IHTTPResponse;
LAtlasListe: TAtlasListe;
LAtlasTable: TAtlasTable;
begin
LData := EmptyStr;
LStatus := 0;
LClient := THTTPClient.Create;
try
LReponse := LClient.Get(AUrl);
LStatus := LReponse.StatusCode;
if LReponse.StatusCode = 200 then
begin
LAtlasListe := TAtlasListe.Create;
LRetour := TJSONObject.ParseJSONValue(LReponse.ContentAsString).ToString;
LAtlasListe := TJson.JsonToObject<TAtlasListe>(LRetour);
for LAtlasTable in LAtlasListe.AtlasListe do
LData := LData + LAtlasTable.Nom + ':' + LAtlasTable.Libelle + #13#10;
LAtlasListe.Free;
end;
finally
LClient.Free;
end;
TThread.Synchronize(TThread.CurrentThread,
procedure
begin
AAfficheData(LStatus, Trim(LData));
end);
end)
.Start; |
Le code fait bien ce que j'en attends, jusqu’à la ligne :
Code:
LAtlasListe := TJson.JsonToObject<TAtlasListe>(LRetour);
Aprés la ligne, le tableau reste vide.
Qu'est-ce que j'ai mal fait, c'est un problème de création des classes TAtlasListe ou TAtlasTable, ou alors c'est la structure de mon JSON qui est incorrect pour pouvoir être utilisé par TJson.JsonToObject ?
Merci d'avance de vos remarques !