Question JSON

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Shadow
Messages : 1413
Inscription : mer. 04/nov./2015 17:39

Question JSON

Message par Shadow »

Bonjour :)

J'essaye de me mettre et de bien comprendre le fonctionnement d'un JSON qui est compliqué pour un débutant.
Pour commencer:

Code : Tout sélectionner

#JSON_Create = 99 ; Le numéro d'identification de la nouvelle collection JSON, #PB_Any peut être utilisé pour générer automatiquement ce numéro.
#JSON_Parse = 100

; Crée une nouvelle collection de données JSON vide.
; (Optionnel) L'option "#PB_JSON_NoCase" peut être utilisé: Les données JSON seront traitées de façon insensible à la casse, La valeur par défaut est d'être sensible à la casse.
; Les données #JSON nouvellement créées avec CreateJSON() contiennent une valeur de type #PB_JSON_Null.
; Si #PB_Any a été utilisé pour paramètre #JSON Alors le nombre généré est renvoyé en cas de succès.
JSONCreate = CreateJSON(#JSON_Create) ; Renvoie une valeur non nulle si la collection JSON a été créée, zéro Sinon.
Debug JSONCreate

; Renvoie la valeur des données #JSON spécifiés.
JSONValeur = JSONValue(#JSON_Create) ; "JSONValeur" contient La valeur JSON, Le résultat n'est jamais nul pour un ensemble de données #JSON valides.
Debug JSONValeur
Pourquoi les deux valeur son différente, ne devrait-telle pas être pareil ?
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
Avatar de l’utilisateur
Mindphazer
Messages : 700
Inscription : mer. 24/août/2005 10:42

Re: Question JSON

Message par Mindphazer »

JSONCreate() revoie une valeur nulle si la création a échoué, une valeur quelconque sinon.
Alors que JSONValue() renvoie la valeur JSON, qui n'a rien à voir avec le résultat de la création.
Bureau : Win10 64bits
Maison : Macbook Pro M3 16" SSD 512 Go / Ram 24 Go - iPad Pro 32 Go (pour madame) - iPhone 15 Pro Max 256 Go
Shadow
Messages : 1413
Inscription : mer. 04/nov./2015 17:39

Re: Question JSON

Message par Shadow »

Mindphazer a écrit :JSONCreate() revoie une valeur nulle si la création a échoué, une valeur quelconque sinon.
Alors que JSONValue() renvoie la valeur JSON, qui n'a rien à voir avec le résultat de la création.
Merci Mindphazer :)
Ok elle sert juste à savoir si la création à réussi ou non, à rien d'autre.
Mais c'est quoi ce numéro ?, un emplacement dans la mémoire ?

Je ne sais pas comment ça marche et je veux apprendre :)
C'est pas facile comparer à un INI qui est très facile a comprendre !
Mais avec un INI tu fais beaucoup moins de chose !

La valeur JSON sert a quoi ?, c'est un genre d’identification comme pour un Gadget c'est ça ?
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
Avatar de l’utilisateur
Naheulf
Messages : 193
Inscription : dim. 10/mars/2013 22:22
Localisation : France

Re: Question JSON

Message par Naheulf »

CreateJSON() --> Renvoie un identifiant qui permet à purebasic de retrouver le JSON dans la mémoire de l'ordinateur.
JSONValue() --> Renvoie un identifiant qui permet à purebasic de retrouver une valeur JSON dans la mémoire de l'ordinateur. Cette valeur pouvan être de différents types, il faudra utiliser JSONType() pour le connaitre puis la fonction approprié pour récupérer une valeur exploitable.

/!\ Un identifiant n'est PAS un pointeur /!\
Shadow
Messages : 1413
Inscription : mer. 04/nov./2015 17:39

Re: Question JSON

Message par Shadow »

Merci, car c'est un peu confus pour moi j’avoue :?
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
Shadow
Messages : 1413
Inscription : mer. 04/nov./2015 17:39

Re: Question JSON

Message par Shadow »

Bonjour,

Comment fait-on plusieurs sous niveau dans un JSON ?, genre:

Code : Tout sélectionner

Vehicules
  Type
    Voiture
      Marque
        BMW
        Renaud
        Férarie

    Deux Roue
      Scooter
        Marque

      Moto
        Marque

      Vélo
        Marque
    
    Aherien
      Avion
        A380
        747
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
Avatar de l’utilisateur
Ar-S
Messages : 9546
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Question JSON

Message par Ar-S »

~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Shadow
Messages : 1413
Inscription : mer. 04/nov./2015 17:39

Re: Question JSON

Message par Shadow »

Merci Ar-S, jy est pas pensée :)
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
Shadow
Messages : 1413
Inscription : mer. 04/nov./2015 17:39

Re: Question JSON

Message par Shadow »

Salut, désolé, j'ai pas trouvé comment faire ce genre de chose avec JSON :(
https://drive.google.com/open?id=1SHFZe ... eoxBr8d-qA
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
Avatar de l’utilisateur
Ar-S
Messages : 9546
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Question JSON

Message par Ar-S »

Désolé Shadow. Je peux pas t'aider. J'ai pas le temps d'explorer Json et le peu de temps que j'ai je l'utilise pour poursuivre mon code de webradio.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Shadow
Messages : 1413
Inscription : mer. 04/nov./2015 17:39

Re: Question JSON

Message par Shadow »

Ar-S a écrit :Désolé Shadow. Je peux pas t'aider. J'ai pas le temps d'explorer Json et le peu de temps que j'ai je l'utilise pour poursuivre mon code de webradio.
Merci quand même Ar'S 8)
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
Avatar de l’utilisateur
Naheulf
Messages : 193
Inscription : dim. 10/mars/2013 22:22
Localisation : France

Re: Question JSON

Message par Naheulf »

Personnellement, ton exemple j’aurais tendance à l’écrire de cette façon en JSON (ce n’est qu’une façon de faire parmi d’autres) :

Code : Tout sélectionner

{
	"Membres" : {
		"Parents" : {
			"Maman" : {"Nom" : "Ratoux", "Prénom" : "Alice", "Âge" : 35},
			"Papa"  : {"Nom" : "Ratoux", "Prénom" : "Grégoire", "Âge" : 38}
		},
		"Enfants" : [
			{"Nom" : "Ratoux", "Prénom" : "Amélie", "Âge" : 8},
			{"Nom" : "Ratoux", "Prénom" : "Tom", "Âge" : 10},
			{"Nom" : "Ratoux", "Prénom" : "Jasmine", "Âge" : 12},
		]
	},
	"Maison"  : {
		"Adresse" : "24 Rue sains rule 49521 Nice",
		"Pieces"  : {
			"Superficie" : 108,
			"Composition" : [
				{"Chambre" : 8},
				{"Cuisine" : 1},
				{"Salle de Bain" : 2},
				{"Salon" : 3},
				{"Garage" : 2},
				{"WC" : 2}
			]
		}
	}
}
Quelques remarques sur ce JSON :
— Touts les membres de la famille ont la même structure. (Nom, Prénom, Âge). En réalité ce sont tous des personnes. Ce qui peut être représenté en PureBasic par une structure du type :

Code : Tout sélectionner

Structure
	Nom.s
	Prenom.s
	Age.s
EndStructure
— Je n’ai pas précisé « Ans » pour l’âge car c’est l’unité « par défaut » pour l’âge… En plus, le fait d’avoir une valeur numérique peut faciliter les traitements ultérieurs.
— Le groupage de « Maman » et de « Papa » dans un groupe « Parents » peut être facultatif Puisque « Maman » et « Papa » sont, par définition, des parents. Cette association n’est donc pas obligé de ressortir dans le JSON et peut être traité directement dans le programme.

— J’ai mis les enfants dans un tableau sans spécifier le numéro d’ordre. En effet il n’y a pas d’enfant plus important qu’un autre et on peut toujours retrouver cet ordre en faisant un tri par âge. (Tri facilité par l’utilisation d’une valeur numérique pour l’âge)

— Pour la maison je me suis permis d’introduire le concept de « composition ». L’unique but est de séparer les pièces de la superficie. (Il n’y a pas 108 m² pièces nommées « Superficie »…)

— Toujours pour la superficie (et comme pour l’âge) je me suis permis d’enlever l’unité pour des raisons équivalentes.

— Pour le détail de chaque pièce j’ai fait un objet par pièce mais c’est ici facultatif. L’idée c’est de facilement pouvoir ajouter d’autres détails (superficie de chaque pièce, couleur, nombres de prises, mobilier…). En l’état actuel tu peux très bien remplacer ça par un simple tableau associatif (map en PureBasic)

Code : Tout sélectionner

"Composition" : {
	"Chambre" : 8,
	"Cuisine" : 1,
	"Salle de Bain" : 2,
	"Salon" : 3,
	"Garage" : 2,
	"WC" : 2
}
NOTES :
— Pour l’âge selon le traitement à effectuer et la durée de vie de ton JSON il peut être plus intéressant de stocker la date de naissance (sous un format textuel facilement lisible ou sous forme de timestamp)
— Pour l’adresse, toujours selon le traitement à effectuer, il peut être intéressant de séparer le numéro, la rue, la vile et le code postal.
— Dans mon JSON j’ai bien mis « Âge » avec l’accent circonflexe sur le « A » mais vu que ce n’est une valeur utilisée qu’en interne et que le caractère « Â » prend plus de place en Utf-8 que le « A » ou le « a », tu peux l’omettre. En plus, ça te permettra d’avoir le même nom dans ta structure PureBasic et dans le JSON. (Même si « age » n'as rien avoir avec âge.)
Attention tout texte affiché DOIT avoir les accents et autres diacritiques, y compris sur les majuscules. Ça évitera, entre autres, de confondre l'ancienneté des personnes avec leur nombre de pièces de charrues...
Shadow
Messages : 1413
Inscription : mer. 04/nov./2015 17:39

Re: Question JSON

Message par Shadow »

Bonjour et merci Naheulf,

Je demandais pas tans :)
Ceci n'est qu'un simple exemple, à ne pas prendre au premier dégrée !

En faite je cherche juste à comprendre comment ça marche, c'est pas si simple pour un débutant !
Si jamais tu as le temps et l'envie, pourrais tu éventuellement me faire voir comment tu coderais ça en PB ? :)
Ceci afin d'apprendre comment cela fonctionne !
Merci !
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
Avatar de l’utilisateur
Naheulf
Messages : 193
Inscription : dim. 10/mars/2013 22:22
Localisation : France

Re: Question JSON

Message par Naheulf »

Je n'auriais pas le temps de te faire un code en PB... Désolé.

Si c'est pour savoir comment "cela" fonctionne je discriminerais deux aspects.

1) Comment structurer les données dans le fichiers JSON :
Pour moi la réponse est simple : il ne faut pas penser JSON. Le JSON n'est pas une fin mais seulement un outil permettant de représenter textuellement des données déjà structurées. En fait, dans notre cas, il faut penser uniquement en PureBasic : Comment représenter ces données en utilisant des structures, des tableaux, des maps et des listes chainées. Ensuite c'est de la transposition :
- structure --> objet JSON
- tableau --> tableau JSON
- map -->objet JSON
- liste (chainée) -> tableau JSON
Attention toutes fois : dans les tableaux en json, l'ordre des éléments n'est pas garanti. certains prseurs le conservent, d'autre non.

2) Comment importer et exporter des données dans une structure JSON connue :
Je vais être franc : pour l'instant je n'ai pas encore utilisé de JSON avec PureBasic. Je me suis seulement renseigné car je vais en avoir besoin dans un très gros projet perso.
Shadow
Messages : 1413
Inscription : mer. 04/nov./2015 17:39

Re: Question JSON

Message par Shadow »

Merci Naheulf,

Ceci m'éclair un peu, j'ai du boulot.
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
Répondre