JeuWeb - Crée ton jeu par navigateur
Validation d'un message JSON - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Validation d'un message JSON (/showthread.php?tid=5802)



Validation d'un message JSON - Ter Rowan - 14-11-2011

Bonjour

Je vais m’essayer à JSON pour des échanges Ajax(ajaJ ?...) vers PHP.
Se pose la question de la validation du message.

Avant de partir vers un développement spécifique (ou de post ponner le point à dans quelques mois) j’aurais voulu savoir si vous pouvez m’indiquer des librairies, code spécifique (propre et pas très lourd), etc… qui permettent de contrôler un minimum un fichier json,

Ce que j’entends par « minimum » :

- Pas besoin de contrôler un « objet » seul l’interprétation tableau me suffit.

- A la racine ou plus profondément, un « tableau » peut être soit totalement associatif, soit pas du tout (pas de tableau mixte avec champ clef ou pas)

- Si un tableau doit être associatif je vérifie que toutes les clefs sont présentes

- Si un tableau doit être associatif, je vérifie que toutes les valeurs du tableau sont du bon type, le type dépendant de la clef ( « foo » => « bar » , « bar » doit être une chaine parce que foo attend une chaine alors que « foo2 » => « bar2 » est une erreur car « foo2 » doit être un entier)

- Si un tableau ne doit pas être associatif, je vérifie que toutes les valeurs sont du bon type (dans ce cas un seul type pour toutes les valeurs du tableau)

- Les types acceptés sont : entier, chaine, réel, tableau associatif, tableau pas associatif (et, dans le cas d’un tableau, on descend dans la validation par récursivité)

Je crois que c’est à peu près tout

Si je ne trouve rien (j’ai pas vu grand-chose sur google, en français que dalle, en anglais, je suis peut être passé à côté) j’imagine de créer un « schema » qui représenterait ce que j’attends

Par exemple, je créerais un « template de réponse » via tableau associatif (indice => type) que je parcourrais par récursivité
L’indice étant une clef du tableau que devrait me fournit json

Si ce que j’attends est un tableau associatif, alors le « type » attendu est un fichier associatif avec autant de clefs qu’attendu (et je continue sur le même principe plus profondément)

Si ce que j’attends est un tableau non associatif, alors le « type » attendu est un tableau avec une seule clef (genre le nombre 0) et la valeur étant elle-même le type que j’attends (et éventuellement un tableau, pour continuer.

Sinon, le type serait un nombre pour clarifier le type de données attendu, genre 1 = entier, 2 = réel

Merci de votre aide/ avis
Je ne vois pas de grosses difficultés à développer moi même l'affaire, ça pourrait même être amusant (enfin juste un peu) mais je préférerais éviter si un script simple et propre permet déjà de faire ce que je veux


RE: Validation d'un message JSON - niahoo - 14-11-2011

Je n'ai pas bien compris ce que tu cherches … Si tu as un modèle, par exemple joueur, que tu veux en avoir une représentation en JSON, il te suffit d'avoir une fonction qui transforme ce modèle en JSON. Par exemple une méthode to_json() si tu fais de la POO.

Ainsi, si ton modèle valide correctement les données qui lui sont passées, le JSON sera correct.

Dans l'autre sens, il te suffit de traduire ton JSON en array php et ensuite de tenter le création d'un modèle à partir de ça. Si cette création échoue alors le JSON n'est pas valide.

Donc en toute logique je dirais que le script que tu cherches n'est pas vraiment utile, à moins que le JSON soit une structure de données native dans ton code serveur.


RE: Validation d'un message JSON - Ter Rowan - 14-11-2011

(14-11-2011, 12:29 PM)niahoo a écrit : Donc en toute logique je dirais que le script que tu cherches n'est pas vraiment utile, à moins que le JSON soit une structure de données native dans ton code serveur.

c'est l'idée oui

en fait s'il n'y avait qu'un seul type de message à valider je le ferai ainsi mais justement j'aimerais pour différents messages fonctionner toujours de la même manière

à savoir valider le message via un shema (ou template ou je ne sais quel nom utiliser correctement) puis récupérer les données directement ($this->_mydata = json_decode($msg) );




RE: Validation d'un message JSON - srm - 14-11-2011

http://davidwalsh.name/json-validation

Par exemple Smile


RE: Validation d'un message JSON - Ter Rowan - 14-11-2011

(14-11-2011, 03:15 PM)oxman a écrit : http://davidwalsh.name/json-validation

Par exemple Smile
c'est exactement cela mais en php ^^



RE: Validation d'un message JSON - Sephi-Chan - 14-11-2011

Regarde du côté de https://github.com/jesstelford/jsonschemaphp. Ce n'est pas vraiment maintenu mais si ça marche…

Ça m'a vraiment surpris de voir que PHP — pourtant très populaire — dispose de si peu d'outils du genre.



RE: Validation d'un message JSON - srm - 14-11-2011

http://json-schema.org/
http://json-schema.org/implementations.html
http://sourceforge.net/projects/jsonschemaphpv/


RE: Validation d'un message JSON - php_addict - 14-11-2011

je ne suis pas certain de comprendre...pourquoi ne fais tu pas ta propre modélisation de ton objet json en fonction de tes besoins?


RE: Validation d'un message JSON - Ter Rowan - 14-11-2011

merci messieurs, je pense que vous m'avez apporté la solution, plus qu'à creuser maintenant Smile

(14-11-2011, 10:59 PM)php_addict a écrit : je ne suis pas certain de comprendre...pourquoi ne fais tu pas ta propre modélisation de ton objet json en fonction de tes besoins?

ce n'est pas une question de modélisation d'un objet. J'estime que j'aurais plus d'une dizaine de messages JSON différents. Je cherche un code générique qui permette de valider tous ces messages

plutôt que de me coltiner n fois un développement spécifique qui ne varie que très peu d'un message à l'autre, je cherche un développement unique qui vérifie en fonction d'instructions(ici décrit par un fichier JSON) la validité du message envoyé par le client