PureBasic

Forums PureBasic
Nous sommes le Mer 17/Juil/2019 4:15

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 24 messages ]  Aller à la page 1, 2  Suivante
Auteur Message
 Sujet du message: JSON (JavaScript Object Notation)
MessagePosté: Sam 31/Mai/2014 15:20 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 22/Aoû/2010 15:24
Messages: 6846
Localisation: IDF (Yvelines)
Une des nouveautés de la version 5.30 de Pure Basic est la gestion des fichier JSON (JavaScript Object Notation)

Si vous ne connaissez pas les caractéristiques d'un fichier JSON, cliquez sur ce lien : Présentation de JSON

■ Ce premier tutoriel sous la forme d'un code commenté abordera les points suivants :
- La création d'une chaîne JSON CreateJSON()
- L'insertion d'une liste chaînée dans une chaine JSON InsertJSONList()
- La sauvegarde d'une chaîne JSON dans un fichier SaveJSON()
- Debug de la composition d'une chaine JSON ComposeJSON()

■ Rien de sorcier, nous allons créer une structure et sa liste chaînée associée qui contiendra deux noms. Cette liste chaînée sera ensuite sauvegardée dans un fichier au format JSON.
Code:
Enumeration
  #JSONFile
EndEnumeration

Structure Address
  Actif.b
  Name.s
  County.i
EndStructure

NewList Contacts.Address()

;Création d'une structure JSON (Nouvelle fonction)
CreateJSON(#JSONFile)

;Trés classique : Ajoutons deux élémement à la liste chainée
AddElement(Contacts())
With Contacts()
  \Actif = #True
  \Name = "Wagner"
  \County = 75
EndWith

AddElement(Contacts())
With Contacts()
  \Actif = #True
  \Name = "Hilton"
  \County = 92
EndWith

;Insertion de la liste chainée dans la chaine JSON (Nouvelle fonction)
InsertJSONList(JSONValue(#JSONFile), Contacts())

;Sauvegarde de la chaine JSON (Nouvelle fonction)
SaveJSON(#JSONFile, "contacts.json")

;Debug de la chaine JSON (Nouvelle fonction)
Debug ComposeJSON(#JSONFile, #PB_JSON_PrettyPrint)

_________________

➽ Config PureBasic : i3, RAM 4Go, NVidia (1024 Mo), Windows 10 - PB 5.70 LTS
➽ Je papote aussi sur http://purebasic.chat

➽ Sites personnels http://falsam.com & EasySprite.js

➽ Je ne réponds pas aux MP techniques


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: JSON (JavaScript Object Notation)
MessagePosté: Sam 31/Mai/2014 15:24 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 22/Aoû/2010 15:24
Messages: 6846
Localisation: IDF (Yvelines)
■ C'est bien beau de sauvegarder une liste dans un fichier JSON ! Mais comment lire ce fichier et l'insérer à nouveau dans une liste chaînée ?

■ C'est l'objet de cette deuxième partie de ce tutoriel, lui aussi sous la forme d'un code commenté qui abordera les points suivants :
- Chargement d'un fichier JSON LoadJSON()
- Extraction de la chaine JSON et ajout de cette chaine dans la liste chainée ExtractJSONList()
Code:
Enumeration
  #JSONFile
EndEnumeration

Structure Address
  Actif.b
  Name.s
  County.i
EndStructure

NewList Contacts.Address()

;Lecture du fichier JSON (Nouvelle fonction)
LoadJSON(#JSONFile, "contacts.json", #PB_JSON_NoCase)

;Extraction de la chaine JSOn vers la liste chainée Contacts (Nouvelle fonction)
ExtractJSONList(JSONValue(#JSONFile), Contacts())

;Debug de la chaine JSON (Nouvelle fonction)
Debug ComposeJSON(#JSONFile, #PB_JSON_PrettyPrint)

;ou debug plus classique
ForEach Contacts()
  With Contacts()
    Debug \Name + " Country: " + \County
  EndWith
Next

_________________

➽ Config PureBasic : i3, RAM 4Go, NVidia (1024 Mo), Windows 10 - PB 5.70 LTS
➽ Je papote aussi sur http://purebasic.chat

➽ Sites personnels http://falsam.com & EasySprite.js

➽ Je ne réponds pas aux MP techniques


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: JSON (JavaScript Object Notation)
MessagePosté: Dim 01/Juin/2014 13:01 
Hors ligne

Inscription: Sam 23/Fév/2008 17:58
Messages: 555
Merci Falsam
Voici ma petite contribution sur le chargement et le déchargement d'un tableau à 1 ou 2 dimensions avec les instructions JSON
Code:
Macro _q_t_
  "
EndMacro

Macro _n(__n)
  _q_t_#__n#=_q_t_+Str(__n)+" "
EndMacro
Dim Numbers.l(0)

; This is the magic!
ParseJSON(1, "[2, 4, 6, 8, 10, 12, 0, 1]")
Debug JSONArraySize(JSONValue(1))

ExtractJSONArray(JSONValue(1), Numbers())

For i = 0 To ArraySize(Numbers())
  Debug Numbers(i)
Next i
Debug "c'est fini pour le tableau 1 dimension"
;***********************************************************************************
ParseJSON(0, "[[0, 1, 2], [3, 4, 5], [6, 7, 8]]")
 
  Dim a(0, 0)
  ExtractJSONArray(JSONValue(0), a())
 
  For x = 0 To 2
    For y = 0 To 2
      Debug _n(a(x, y))+_n(x)+_n(Y)
    Next y
  Next x
 
  Debug "c'est fini pour le tableau à 2 dimensions"
  ;****************************************************************************************
  Debug "Maintenant on fait l'inverse on rempli un espace Json"
  Debug ComposeJSON(0)
  ; Clear de JSONValue(0)
  ClearJSONElements(JSONValue(0))
  Debug ComposeJSON(0)
Debug "il est bien vide"
    If CreateJSON(2)
    InsertJSONArray(JSONValue(2), a())
    Debug ComposeJSON(2)
  EndIf
  Debug "on a bien retrouvé l'espace JSON  d'origine"
 


On peut ainsi avec quelques instructions sauver un tableau dans un fichier et le récupérer par la suite
A+

_________________
Il est fort peu probable que les mêmes causes ne produisent pas les mêmes effets.(Einstein)
Et en logique positive cela donne.
Il est très fortement probable que les mêmes causes produisent les mêmes effets.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: JSON (JavaScript Object Notation)
MessagePosté: Dim 01/Juin/2014 17:53 
Hors ligne

Inscription: Mer 25/Déc/2013 7:34
Messages: 271
Localisation: la corse
merci pour ce tuto
en plus c'est un fomat de fichier utilisé par firefox .

_________________
LeMaquis


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: JSON (JavaScript Object Notation)
MessagePosté: Dim 01/Juin/2014 18:42 
Hors ligne
Avatar de l’utilisateur

Inscription: Jeu 14/Oct/2004 19:48
Messages: 1121
Donc pour résumer, c'est pratique pour sauvegarder et recharger des structures ainsi que pour les initialiser sans utiliser une boucle de data.
Ainsi que pour échanger des données entre différents langages.
J'ai bon ?

_________________
Il y a deux méthodes pour écrire des programmes sans erreurs. Mais il n’y a que la troisième qui marche.
Version de PB : 5.45LTS - 32 bits


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: JSON (JavaScript Object Notation)
MessagePosté: Dim 01/Juin/2014 19:38 
Hors ligne

Inscription: Lun 26/Avr/2004 0:40
Messages: 14535
franchement, je vois pas trop l'interet... mais bon ..

on peut déjà faire tout ça , avec un fichier standard ...
voir avec les "Préférences" , si on veux un truc legerement hiérarchisé ...

deja le XML , c'est le truc a la mode, je trouve ça plutôt lourdingue ... mais bon ...
on creer des formats nouveaux , qui font mode ....

pour moi , c'est un peu pisser dans un violon .. (faudra que j'essaie ça un jour ... depuis le temps que j'en entends parler )


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: JSON (JavaScript Object Notation)
MessagePosté: Dim 01/Juin/2014 22:07 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 22/Aoû/2010 15:24
Messages: 6846
Localisation: IDF (Yvelines)
@Dobro : Je préfére stocker et sauvegarder une liste chainée de cette façon
Code:
InsertJSONList(JSONValue(#JSONFile), MaListeChaine())
SaveJSON(#JSONFile, "MaListeChaine.json")
plutot que de me coder une procédure ou une routine 100 fois plus longue et pas normalisé.

Les fichier XML ou JSON ne sont pas un phénomène de mode. Ces fichiers existe depuis plus de 10 ans et sont normalisés.

55 langages sont capables d'interpréter les fichiers JSON en natif : C++, C#, Java, JavaScript, Perl, Python, Php ...... et maintenant Pure Basic.

:arrow: Le site : json.org

_________________

➽ Config PureBasic : i3, RAM 4Go, NVidia (1024 Mo), Windows 10 - PB 5.70 LTS
➽ Je papote aussi sur http://purebasic.chat

➽ Sites personnels http://falsam.com & EasySprite.js

➽ Je ne réponds pas aux MP techniques


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: JSON (JavaScript Object Notation)
MessagePosté: Dim 01/Juin/2014 22:25 
Hors ligne
Avatar de l’utilisateur

Inscription: Ven 13/Fév/2004 0:57
Messages: 3702
Citation:
Donc pour résumer, c'est pratique pour sauvegarder et recharger des structures ainsi que pour les initialiser sans utiliser une boucle de data.
Ainsi que pour échanger des données entre différents langages.
J'ai bon ?


J'ai commencé a découvrir le format Json dans les requêtes web, le XML plus ancien semble mieux adapté à l'échange des données dans certains cas, tu peux par exemple créer un fichier xml qui sera lu par excel, ce qui est plutôt intéressant.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: JSON (JavaScript Object Notation)
MessagePosté: Dim 01/Juin/2014 22:37 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 22/Aoû/2010 15:24
Messages: 6846
Localisation: IDF (Yvelines)
Fig a écrit:
Donc pour résumer, c'est pratique pour sauvegarder et recharger des structures ainsi que pour les initialiser sans utiliser une boucle de data.
Ainsi que pour échanger des données entre différents langages.
J'ai bon ?
Tu as bon :) Les fichiers étant normaliser, une cinquantaine de langages sont capables de manipuler nativement les fichiers JSON comme Pure Basic bien sur mais aussi pour citer les principaux : JavaScript, Php, C, C++, C#, Python, Visual Basic, Ruby.

_________________

➽ Config PureBasic : i3, RAM 4Go, NVidia (1024 Mo), Windows 10 - PB 5.70 LTS
➽ Je papote aussi sur http://purebasic.chat

➽ Sites personnels http://falsam.com & EasySprite.js

➽ Je ne réponds pas aux MP techniques


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: JSON (JavaScript Object Notation)
MessagePosté: Dim 01/Juin/2014 22:49 
Hors ligne
Avatar de l’utilisateur

Inscription: Jeu 14/Oct/2004 19:48
Messages: 1121
nico a écrit:
J'ai commencé a découvrir le format Json dans les requêtes web, le XML plus ancien semble mieux adapté à l'échange des données dans certains cas, tu peux par exemple créer un fichier xml qui sera lu par excel, ce qui est plutôt intéressant.

Pour excel, j'ai l'habitude d'utiliser des fichier CSV (+chr13 et ";"), qu'est ce qui change en xml ? on peut gérer la mise en page, les couleurs ... ?

_________________
Il y a deux méthodes pour écrire des programmes sans erreurs. Mais il n’y a que la troisième qui marche.
Version de PB : 5.45LTS - 32 bits


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: JSON (JavaScript Object Notation)
MessagePosté: Dim 01/Juin/2014 23:27 
Hors ligne
Avatar de l’utilisateur

Inscription: Ven 13/Fév/2004 0:57
Messages: 3702
Le CSV, oui c'est très simple mais c'est chiant à l'ouverture quand il faut se taper tout les redimensionnement des colonnes quand ça va pas, avec un peu de XML tu peux ajuster les colonnes, les couleurs et tout un tas de truc; après ça va dépendre de tes données.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: JSON (JavaScript Object Notation)
MessagePosté: Lun 02/Juin/2014 8:19 
Hors ligne

Inscription: Lun 26/Avr/2004 0:40
Messages: 14535
falsam a écrit:
@Dobro : Je préfére stocker et sauvegarder une liste chainée de cette façon
Code:
InsertJSONList(JSONValue(#JSONFile), MaListeChaine())
SaveJSON(#JSONFile, "MaListeChaine.json")
plutot que de me coder une procédure ou une routine 100 fois plus longue et pas normalisé.


heu , quoique tu fasses, l'appel de la routine se fait pour l'utilisateur en 2 instructions
mais derrière la boucle de lecture, existe bel et bien !
il faut forcement une boucle pour "parser" le contenu du fichier /structure/liste ....

que je sache les données écrites ne sont pas compressées ...

donc niveau vitesse , (si par "plus longue" tu entends vitesse) utiliser une boucle de chargement/sauvegarde complète de ton fichier ,
doit allez aussi vite que les fonctions JSON , je supposes, que c'est surtout l'appel qui est simplifié ...


pour ce qui est de la vitesse , je demande a voir ....
c'est la vitesse du disque dur, qui bloque .. c'est tout

les fonctions JSON, diminue la taille du code ...
mais rien n’empêche de coder ta routine de chargement/sauvegarde en librairie ,
et ainsi disposer de 2 fonctions de chargement/sauvegarde ... dans le format qui est le tiens ....

le fait de dire que tout les langages utilisent Json , n'est pas forcement gage de qualité
j'aurai préféré des fonctions sur les Strings (comme en PHP) , des fonctions sur la gestions de la souris/joystick (sans avoir a faire appel au API)
j'aurai préféré des Variables flottantes dans les Boucles For Next step., des Sprites Flipables , une amélioration du WebGadget .etc ...etc ....
beaucoup plus utiles dans le quotidien de petit programmeurs du dimanche ..

mais bon :)

c'est bien Purebasic n'est pas mort, on va pas se plaindre


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: JSON (JavaScript Object Notation)
MessagePosté: Mar 03/Juin/2014 15:38 
Hors ligne
Avatar de l’utilisateur

Inscription: Sam 21/Mai/2005 17:50
Messages: 1318
C'est quand même vachement pratique !
Parce que le JSON est devenu très utilisé dans le cas d'appel à des API Web.

J'en ai eu besoin il y a 4 mois, Pb ne prenant pas encore en charge ce truc, j'ai du chercher comment m'en sortir, et je te garantie que gérer le format complet JSON à la main, ca n'est pas un cadeau, même si ça reste simple en comparaison d'autres formats.

Purebasic est un basic très puissant, mais c'est un basic et ce genre de commande ajoutée est ce qui défini un basic.
De plus avec l'ajout de SpiderBasic qui touche au web / javascript etc.. Ca me parait évident que cet ajout découle de là.

_________________
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: JSON (JavaScript Object Notation)
MessagePosté: Mar 03/Juin/2014 16:40 
Hors ligne
Avatar de l’utilisateur

Inscription: Jeu 14/Oct/2004 19:48
Messages: 1121
Comment ça marche pour sauvegarder des structures imbriquées ?
Genre:
Code:
Structure carte
objet.i
Endstructure
Structure truc
list bidule.i()
map Carte.carte()
EndStructure
newlist Liste.truc()


Quelqu'un peut donner un exemple ?

_________________
Il y a deux méthodes pour écrire des programmes sans erreurs. Mais il n’y a que la troisième qui marche.
Version de PB : 5.45LTS - 32 bits


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: JSON (JavaScript Object Notation)
MessagePosté: Mar 03/Juin/2014 17:56 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 22/Aoû/2010 15:24
Messages: 6846
Localisation: IDF (Yvelines)
Fig a écrit:
Comment ça marche pour sauvegarder des structures imbriquées ?
Exactement comme une liste classique dans ce cas.

■ Création d'une chaine JSON
■ Insertion de la liste chainée dans la chaine JSON
■ Sauvegarde de la chaine JSON

Ça tient en 3 lignes.
Code:
Enumeration
  #JSONFile
EndEnumeration

Structure carte
  objet.i
EndStructure

Structure truc
  List bidule.i()
  Map Carte.carte()
EndStructure

NewList Liste.truc()

AddElement(Liste())

With Liste()
  AddElement(\bidule())
  \bidule() = 10
 
  AddMapElement(\Carte(), "cle 1")
  \carte()\objet = 20
EndWith


;Création d'une structure JSON (Nouvelle fonction)
CreateJSON(#JSONFile)

;Insertion de la liste chainée dans la chaine JSON (Nouvelle fonction)
InsertJSONList(JSONValue(#JSONFile), Liste())

;Sauvegarde de la chaine JSON (Nouvelle fonction)
SaveJSON(#JSONFile, "liste.json")

;Debug de la chaine JSON (Nouvelle fonction)
Debug ComposeJSON(#JSONFile, #PB_JSON_PrettyPrint)


■ Le code de chargement des données de la liste chaînée imbriquée est lui aussi le même.
Code:
Enumeration
  #JSONFile
EndEnumeration

Structure carte
  objet.i
EndStructure

Structure truc
  List bidule.i()
  Map Carte.carte()
EndStructure

NewList Liste.truc()

;Lecture du fichier JSON (Nouvelle fonction)
LoadJSON(#JSONFile, "liste.json", #PB_JSON_NoCase)

;Extraction de la chaine JSOn vers la liste chainée Contacts (Nouvelle fonction)
ExtractJSONList(JSONValue(#JSONFile), Liste())

;Debug de la chaine JSON (Nouvelle fonction)
Debug ComposeJSON(#JSONFile, #PB_JSON_PrettyPrint)

;ou Debug plus classique
Debug #CRLF$ + "=Liste imbriquée"
ForEach Liste()
  With Liste()
    ForEach(\bidule())
      Debug \bidule()
    Next
   
    ForEach(\Carte())
      Debug \Carte()\objet
    Next
  EndWith
Next


PS : Oui je partage et je ne suis pas devant mon miroir en me disant Whaouu suis trop fort !

_________________

➽ Config PureBasic : i3, RAM 4Go, NVidia (1024 Mo), Windows 10 - PB 5.70 LTS
➽ Je papote aussi sur http://purebasic.chat

➽ Sites personnels http://falsam.com & EasySprite.js

➽ Je ne réponds pas aux MP techniques


Haut
 Profil  
Répondre en citant le message  
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 24 messages ]  Aller à la page 1, 2  Suivante

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages

Rechercher:
Aller à:  

 


Powered by phpBB © 2008 phpBB Group | Traduction par: phpBB-fr.com
subSilver+ theme by Canver Software, sponsor Sanal Modifiye