[RESOLU] Expression régulière pour JSON

Expression régulière pour JSON [RESOLU] - PHP - Programmation

Marsh Posté le 02-09-2011 à 11:55:03    

Bonjour,
Je suis en train de faire un site hébergé par FREE, et la version de PHP est la 4.4.3, ce qui est donc inférieur à la 5.2.0 où l'extension JSON est fourni par défaut.
Donc en attendant que FREE mette à jour sa version de PHP, il faut que je décode le JSON à la main.
 
Pour ça, je prends ma petite chaine de caractère, disons juste une sous chaine comme ça :
 

Code :
  1. "elementMenu": "1","draggable": "","elementMenu": "1","titre": "article rentr� en base � la main ","role": "3","archive": "on"


 
du coup, j'ai voulu traiter ça par une expression régulière avec :
 

Code :
  1. $listElement = preg_split("#^\"|\s*\",\"\s*|\"$#", $value);
  2. ou
  3. $listElement = preg_split("#\A\"|\s*\",\"\s*|\"\z#", $value);


 
mais les deux cas me retournent :
 

Code :
  1. array(8) {
  2.      [0]=> string(0) ""
  3.      [1]=> string(16) "elementMenu": "1"
  4.      [2]=> string(13) "draggable": ""
  5.      [3]=> string(16) "elementMenu": "1"
  6.      [4]=> string(45) "titre": "article rentr� en base � la main"
  7.      [5]=> string(9) "role": "3"
  8.      [6]=> string(13) "archive": "on"
  9.      [7]=> string(0) ""
  10. }


 
 
et comme vous pouvez le voir, ça ramène un élément vide au début et un à la fin. Je pourrai faire une boucle qui ignore le premier et le dernier élément, mais pour la beauté du geste, j'aimerai bien mettre en place une expression régulière qui renvoi directement le bon tableau.


Message édité par naeco le 07-09-2011 à 19:44:43
Reply

Marsh Posté le 02-09-2011 à 11:55:03   

Reply

Marsh Posté le 02-09-2011 à 16:03:58    

Il parait que si tu mets un fichier .htaccess à la racine de ton FTP et qu'il contient

Code :
  1. php 1


Et bien tu auras PHP5. Et donc l'extension JSON.


Message édité par Tirkyth le 02-09-2011 à 16:05:21

---------------
Mon Feedback !
Reply

Marsh Posté le 04-09-2011 à 15:06:59    

merci de ta réponse, je vais tester.
 
Par contre, pour le plaisir d'aboutir cette expression régulière, quelqu'un aurait une idée?

Reply

Marsh Posté le 04-09-2011 à 15:20:02    

naeco a écrit :

merci de ta réponse, je vais tester.
 
Par contre, pour le plaisir d'aboutir cette expression régulière, quelqu'un aurait une idée?


JSON est une structure récursive, tu peux pas le parser correctement avec juste une expression régulière (sauf en perl, à la limite, je sais que les regex perl sont turing-complete et récursives).
 
Je suggérerais plus d'utiliser Pear JSON, c'est juste un fichier PHP à inclure.


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 05-09-2011 à 13:15:56    

En fait PREG signifie PERL REGULAR, ce sont donc des expressions compatibles, et la récursivité de regexp est possible en PHP.
 
Maintenant, on est bien d'accord, parser du JSON avec une regexp, c'est comme découper de la viande avec un silex ! :D


---------------
Directeur Technique (CTO)
Reply

Marsh Posté le 05-09-2011 à 22:32:02    

Nous sommes d'accord, j'ai pas cette prétention, je sais que mon JSON aura une complexité quantifiée, donc je fais un décodeur juste pour mes besoin.
Enfin là surtout, j'aimerai bien réussir à pas avoir ma première et dernière valeur vide, juste pour savoir le faire, même si peut être la solution du .htacess fonctionne.
 
Merci de vos d'idées !

Reply

Marsh Posté le 05-09-2011 à 22:51:48    

Je suis pas un habitué de preg_split, en général je fais plutot du preg_match_all (ce qui est quand même plus sympa : parenthèses capturantes, etc.).
 
En freestyle, pour du preg_split, je dirais :
 
'`\s*,\s*$`Usi'


---------------
Directeur Technique (CTO)
Reply

Marsh Posté le 07-09-2011 à 19:44:15    

Je ne pense pas non.
Tant pis.
 
Sinon, c'était exact, avec ce .htacces, cela provoque actuellement le passage en PHP 5.1.3RC4-dev :
 

Code :
  1. php 1
  2. SetEnv PHP_VER 5


 
Merci !

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed