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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 !