IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Lazarus Pascal Discussion :

Manipulation de JSON


Sujet :

Lazarus Pascal

  1. #1
    Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mars 2014
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Mars 2014
    Messages : 143
    Points : 60
    Points
    60
    Par défaut Manipulation de JSON
    Bonjour,
    Je suis en train d'essayer de me mettre au JSON sous Lazarus.
    J'ai suivi le tuto présent sur le site, j'arrive déjà à récupérer des valeurs mais par contre je bloque sur quelque chose.
    J'ai un tableau d'objets que j'arrive à récupérer, par contre dans les objets de ce tableau j'ai encore des objets.
    Exemple pour reprendre le tuto :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    {
       "langage " : "pascal",
       "annee_creation" :1969,
       "compilateurs" :[
                                      {"nom" : "MIDlet Pascal", "plateforme" : "Windows"},
                                      {"nom" : "Lazarus", "plateforme" : "Windows, linux, macOs", "details" : {"editeur" : "theeditor", "version" : "2019R4"} }
                                   ]
    }
    Comment puis-je accéder à l'objet "details" et à ce qu'il contient ?
    Merci pour votre aide !

  2. #2
    Expert confirmé
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Points : 4 346
    Points
    4 346
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par NicCo Voir le message
    Bonjour,
    Je suis en train d'essayer de me mettre au JSON sous Lazarus.
    Bonjour et bienvenue

    Citation Envoyé par NicCo Voir le message
    J'ai suivi le tuto présent sur le site, j'arrive déjà à récupérer des valeurs mais par contre je bloque sur quelque chose.
    Quel tuto ? et tu bloques sur quoi exactement ?

    Un bout de code et plus d'informations nous sont nécessaires pour te répondre.

    A+
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Développeur amateur
    Inscrit en
    Décembre 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur amateur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 2
    Points : 6
    Points
    6
    Par défaut JSON sous Lazarus : problème
    Citation Envoyé par BeanzMaster Voir le message
    Quel tuto ? et tu bloques sur quoi exactement ?
    Bonjour,
    Je réponds à la place de "NicCo" car j'ai apparemment suivi le même chemin mais le problème est différent. L'exemple provient du tutoriel présenté ici :

    https://darrylsite.developpez.com/tu...s/pascal/json/

    Ma problématique est la suivante : si je charge le code présenté au §V-A. Parcours des données JSON" , j'obtiens les erreurs suivantes lors de la compilation :

    Compilation du projet - Cible : jsonparser.exe : Code de sortie 1 - Erreurs : 7 - Conseils : 2
    Hint: Start of reading config file F:\lazarus-1.6\fpc\3.0.2\bin\x86_64-win64\fpc.cfg
    Hint: End of reading config file F:\lazarus-1.6\fpc\3.0.2\bin\x86_64-win64\fpc.cfg
    jsonparser.lpr(61,1) Error: Undefined symbol: INIT$_$JSONPARSER
    jsonparser.lpr(61,1) Error: Undefined symbol: FINALIZE$_$JSONPARSER
    jsonparser.lpr(61,1) Error: Undefined symbol: RESSTR_$JSONPARSER_$$_START
    jsonparser.lpr(61,1) Error: Undefined symbol: RESSTR_$JSONPARSER_$$_END
    jsonparser.lpr(61,1) Error: Undefined symbol: JSONPARSER$_$TJSONPARSER_$__$$_PARSE$$TJSONDATA
    jsonparser.lpr(61,1) Error: Undefined symbol: VMT_$JSONPARSER_$$_TJSONPARSER
    jsonparser.lpr(61,1) Error: Undefined symbol: JSONPARSER$_$TJSONPARSER_$__$$_CREATE$TSTREAM$TJSONOPTIONS$$TJSONPARSER
    Auriez-vous un conseil pour corriger ces erreurs ?
    Merci pour votre aide.

    Marc le Lorrain

  4. #4
    Expert confirmé
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Points : 4 346
    Points
    4 346
    Billets dans le blog
    2
    Par défaut
    Salut, bizarre chez moi le programme copier fait 57 lignes. De plus dans le tuto il manque un ";" à l'avant dernière ligne avant le "End." et il y a un espace en trop dans le Json.Dat dans le nom "langage"

    Voici la version corrigée

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    {
       "langage" : "pascal",
       "annee_creation" :1969,
       "compilateurs" :[
                        {"nom" : "MIDlet Pascal", "plateforme" : "Windows"},
                        {"nom" : "Lazarus", "plateforme" : "Windows, linux, macOs"}
                       ]
    }
    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
    53
    54
    55
    56
    program project1;
    {$mode objfpc}{$H+}
    uses
      Classes, SysUtils, fpjson,jsonparser, jsonscanner;
     
    procedure displayData(data : TJSONData);
     var lang, comp : TJSONObject;
         tab : TJSONArray;
         i : byte;
    begin
      lang := TJSONObject(data);
      writeln('Les caracteristique du langage : '+lang.Strings['langage']);
      writeln('Date de creation : ',lang.Integers['annee_creation']);
      writeln('------------- Les compilateurs disponibles ---------------- ');
      tab:=lang.Arrays['compilateurs'];
      for i:=0 to tab.Count-1 do
      begin
       comp:= tab.Objects[i];
       write('Nom : '+comp.Strings['nom']);
       write(' / ');
       writeln('Plateforme : '+comp.Strings['plateforme']);
      end;
      writeln('------------------------------------------ ---------------- ');
     
    end;
     
    Procedure DoParse(Parseur : TJSONParser);
    Var
      js : TJSONData;
    begin
      js := parseur.Parse;
      displayData(js);
    end;
     
    Procedure ParseFile (FileName : String);
    Var
      flux : TFileStream;
      Parseur : TJSONParser;
    begin
      flux := TFileStream.Create(FileName, fmopenRead);
      try
        parseur := TJSONParser.Create(Flux, [joUTF8,joStrict,joComments,joIgnoreTrailingComma]);
        try
          DoParse(parseur);
        finally
          FreeAndNil(parseur);
        end;
      finally
        flux.Destroy;
      end;
    end;
     
    begin
      ParseFile('json.dat');
      readln;
    end.
    A+

    Jérôme
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  5. #5
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 072
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 072
    Points : 15 462
    Points
    15 462
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par Marc le Lorrain Voir le message
    Auriez-vous un conseil pour corriger ces erreurs ?
    Je viens de faire un essai. À part le point-virgule manquant signalé par Jérôme, le programme se compile sans problème.

    Je n'arrive pas à voir d'où peut venir le message d'erreur que vous citez.

    Je conseillerais de supprimer les fichiers *.o et *.ppu et de réessayer.
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  6. #6
    Candidat au Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Novembre 2020
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2020
    Messages : 3
    Points : 4
    Points
    4
    Par défaut Ecriture de data dans un objet JSON
    Bonjour,

    J'ai suivi le tuto sur les manipulations de fichier json.
    Je souhaiterai écrire un programme avec une ihm simple pour générer un fichier de la forme suivante :
    Code JSON : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    {
      "Version1": {
         "Temperature": "10",
         "Vitesse":"100"
       },
      "Version2": {
         "Temperature": "20",
         "Vitesse":"100"
         "Pression":"400"
       }
    }

    En reproduisant le tuto, j’arrive bien à générer les TJSONObject Version1 et Version2 mais ensuite je ne parviens pas à créer les data en dessous. Je ne veux pas passer par un tableau TJSONArray.
    Le but est que chaque version ait des paramètres supplémentaires

    Ensuite, dans une autre application, j'aimerai lister les (ou tester l'existence des) objets de niveau 1 Version1, version2, ... puis pour chaque object les paires clés/valeurs présentes.

    Si quelqu'un peut me mettre quelques snippets de code exemple ? Merci d'avance

  7. #7
    Expert confirmé
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Points : 4 346
    Points
    4 346
    Billets dans le blog
    2
    Par défaut
    Bonjour

    pourrais tu nous fournir le code de ton appli de test, car c'est difficile de te répondre en l'état, on ne sait pas comment tu as structuré ton code.

    Sinon il y a un exemple ici : https://wiki.freepascal.org/fcl-json

    A+

    Jérôme
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  8. #8
    Candidat au Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Novembre 2020
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2020
    Messages : 3
    Points : 4
    Points
    4
    Par défaut Ecriture de data dans un objet JSON
    voici mon test :

    Nom : Capture.PNG
Affichages : 771
Taille : 31,5 Ko

    et le code s'y rapportant

    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
     
    procedure TForm1.btnAddClick(Sender: TObject);
    var cont :     TJSONObject;
        str :      TMemoryStream;
        i :      Integer;
        bNewJson:  Boolean;
     
    begin
      bNewJson:=False;
      with StringGrid1 do
      begin
        for i:=1 to RowCount-1 do
        begin
             if (Cells[0,i]<>'') and (Cells[1,i]<>'') then
             begin
                  if Not bNewJson then
                  begin
                       JS := TJSONObject.Create();
                       JS.add('Version'+ComboBox1.Text, TJSONArray.Create);
                       bNewJson:=True;
                  end;
                  cont := TJSONObject.Create([''+Cells[0,i]+'', Cells[1,i]]);
                  JS.Arrays['Version'+ComboBox1.Text].Add(cont);
                  JS.Items.ad;
             end;
        end;
        if bNewJson then
        begin
             Memo1.Text:= JS.AsJSON;
             with TJSONStreamer.Create(nil) do try
                  str := TMemoryStream.Create;
                  try
                     str.Write(JS.FormatJSON, length(JS.FormatJSON));
                     str.SaveToFile('data.json');
                  finally
                     str.Free;
                  end;
                  finally
                     Free;
                  end;
        end;
      end;
    end;
    Je voudrais faire sans le TJSONArray.Create mais en ajoutant un child à Version'+ComboBox1.Text avec Cells[0,i] comme clé et Cells[1,i] comme valeur.
    Le but ensuite sera d'ajouter des sections versionXX avec des paramètres supplémentaires et cela dans un même fichier JSON.
    Au final, je veux pouvoir ouvrir un json et l'utilisateur sélectionnera un numéro de version et j'afficherai les paramètres s'y rapportant.

    Le but est de faire lire le fichier de paramètres par un automate industriel avec un format structuré et reconnu par contre je ne veux pas que l'utilisateur final ait à écrire à la main un json avec le risque de mauvaise structure de fichier d'ou c'est utilitaire très basique

  9. #9
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 953
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 953
    Points : 9 283
    Points
    9 283
    Par défaut
    hello,
    Citation Envoyé par orou74 Voir le message
    En reproduisant le tuto, j’arrive bien à générer les TJSONObject Version1 et Version2 mais ensuite je ne parviens pas à créer les data en dessous. Je ne veux pas passer par un tableau TJSONArray.
    au lieu d'utiliser un TJSONArray , il faut passer par un autre TJSONObject.

    Exemple :

    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
    procedure TForm1.Button1Click(Sender: TObject);var jData :     TJSONData;
        jVersion :  TJSONObject;
        jElements : TJSONObject;
        i :      Integer;
     
    begin
      jVersion := TJSONObject.Create;
      jElements := TJSONObject.Create;
      with ValueListEditor1 do
      begin
         for i:=1 to RowCount-1 do
             begin
                if (Cells[0,i]<>'') and (Cells[1,i]<>'') then
                   jElements.Add(Cells[0,i],Cells[1,i]);
             end;
      end;
      jVersion.Add(ComboBox1.Text,jElements);
      jData := jVersion;
      Memo1.Text := jData.FormatJSON;
      Memo1.Lines.SaveToFile('data.json');
    end;
    Résultat :

    Nom : LazJson.PNG
Affichages : 790
Taille : 14,2 Ko

    et pour lire le contenu du fichier json généré voici un exemple :

    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
    procedure TForm1.Button3Click(Sender: TObject);Var
       F : TFileStream;
       D : TJSONData;
       E : TJSONEnum;
     
    begin
       D:=Nil;
       F:=TFileStream.Create('data.json',fmOpenRead or fmShareDenywrite);
       try
         D:=GetJSON(F);
         for E in D do
           Memo1.Append(E.Key + ' : ' + E.Value.AsJSON);
       Finally
         D.free;
         F.Free;
       end;
    end;
    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  10. #10
    Candidat au Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Novembre 2020
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2020
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    Hello,

    Citation Envoyé par jurassic pork Voir le message

    au lieu d'utiliser un TJSONArray , il faut passer par un autre TJSONObject.
    Merci jp, j'avais pas saisi le fait que l'on puisse faire un add d'un TJSONObject dans un TJSONObject

    Testé et validé.

    Bonne journée.

Discussions similaires

  1. Manipulation oject json dans javascript
    Par noari dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 22/06/2018, 11h16
  2. Manipulation paramètre json
    Par jicayom dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 16/07/2013, 15h15
  3. [Dojo] manipulation du fichier json
    Par execrable dans le forum Bibliothèques & Frameworks
    Réponses: 8
    Dernier message: 04/01/2011, 08h55
  4. Manipulation d'un objet JSON
    Par ordiminnie dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 21/09/2009, 16h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo