begin process at 2012 05 27 19:31:17
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Javascript / DHTML

 > OBJECT 2 JSON

OBJECT 2 JSON




 Description

Si vous ne conaissez pas json, mais qu'ajax vous tient a coeur, vous DEVEZ vous y interesser :)

json est un format de serialization d'objects disons... simple, et lisible, en javascript, ca s'evalue en une ligne simple de code...

var json=eval("("+jsoncode+")");

c'est vraiment simple...

ici, j'ai une class qui gere les exceptions, une interface qui permet de dire quelles classes sont convertibles en json, et une class qui contient la gestion du tout

Source

  • <?php
  • /**
  • * @file JsonSerializa.php
  • * @brief un exemple de code de conversion d'objets ou de variable d'une maniere plus generale, en json
  • */
  • /**
  • * @brief l'Exception
  • * @author coucou747 <coucou747@hotmail.com>
  • * @version 1.0
  • * @date 09-10-2007
  • */
  • class JsonException extends Exception{
  • }
  • /**
  • * @brief l'interface qui doit etre implementee par les classes de tout object qui veut avoir une representation json
  • * @author coucou747 <coucou747@hotmail.com>
  • * @version 1.0
  • * @date 09-10-2007
  • */
  • interface JsonAble{
  • //! la fonction qui permet d'avoir l'equivalent de l'objet en json
  • public function ToJson();
  • }
  • /**
  • * @brief un exemple d'object qui implemente JsonAble
  • * @author coucou747 <coucou747@hotmail.com>
  • * @version 1.0
  • * @date 09-10-2007
  • */
  • class A implements JsonAble{
  • //! la fonction qui permet d'avoir l'equivalent de l'objet en json
  • public function ToJson(){
  • return '{"test":'.JsonSerialize::SerializeVAR($this->str).'}';
  • }
  • //! un exemple
  • public $str='test';
  • }
  • /**
  • * @brief la classe qui contient de quoi faire la conversion Variable php vers Json String.
  • * @author coucou747 <coucou747@hotmail.com>
  • * @version 1.0
  • * @date 09-10-2007
  • */
  • class JsonSerialize{
  • /*
  • public static function SerializeINT($v){
  • return $v;
  • }
  • public static function SerializeSTRING($v){
  • return '"'.str_replace(array('"', '\\'), array('\\"', '\\\\'), $v).'"';
  • }
  • public static function SerializeBOOL($v){
  • return $v?'true':'false';
  • }
  • public static function SerializeNULL($v){
  • return 'null';
  • }*/
  • /**
  • * @brief fonction de conversion d'une chaine
  • * @param $v la valeur a convertir
  • **/
  • public static function SerializeSTRING($v){
  • settype($v, 'string');
  • return json_encode($v);
  • }
  • /**
  • * @brief fonction de conversion d'un array
  • * @param $v le tableau a convertir
  • **/
  • public static function SerializeARRAY($v){
  • $out='[';
  • foreach ($v as $k=>$s){
  • $out.=self::SerializeVAR($s).', ';
  • }
  • $out=substr($out, 0, strlen($out)-2);
  • $out.=']';
  • return $out;
  • }
  • /**
  • * @brief fonction de conversion d'un object
  • * @param $v l'object a convertir
  • * @exception JsonException si l'object n'implemente pas JsonAble
  • **/
  • public static function SerializeOBJ($v){
  • if ($v instanceof JsonAble){
  • return $v->ToJson();
  • }else{
  • throw new JsonException('Object ne peut-etre converti en donnees json');
  • }
  • }
  • /**
  • * @brief fonction de conversion d'une hashmap (ca se fait comme un object)
  • * @param $v la hashmap a convertir
  • **/
  • public static function SerializeHASHMAP($v){
  • $out='{';
  • foreach ($v as $k=>$s){
  • $out.=self::SerializeSTRING($k).':'.self::SerializeVAR($s).', ';
  • }
  • $out=substr($out, 0, strlen($out)-2);
  • $out.='}';
  • return $out;
  • }
  • /**
  • * @brief dit si le parametre est une hashmap
  • * @param $v tableau
  • * @bug $v doit-etre un tableau ou assimile, sinon, ca va provoquer plein de notices
  • **/
  • private static function isHashMap($t){
  • foreach ($t as $a=>$b){
  • if (gettype($a)!='integer') return true;
  • }
  • return false;
  • }
  • /**
  • * @brief fonction de conversion d'une variable
  • * @param $v la valeur a convertir
  • **/
  • public static function SerializeVAR($v){
  • $t=gettype($v);
  • if ($t=='object'){
  • return self::SerializeOBJ($v);
  • }else if ($t=='array'){
  • if (self::isHashMap($v))
  • return self::SerializeHASHMAP($v);
  • else
  • return self::SerializeARRAY($v);
  • }else{
  • return json_encode($v);
  • }
  • /*else if ($t=='integer'){
  • return self::SerializeINT($v);
  • }else if ($t=='string'){
  • return self::SerializeSTRING($v);
  • }else if ($t=='boolean'){
  • return self::SerializeBOOL($v);
  • }else if ($t=='NULL'){
  • return self::SerializeNULL($v);
  • }*/
  • }
  • }
  • $array=array(
  • 'test'=>array(1, 2, 3, "test", "test", NULL, false, true, new A()),
  • 'test'
  • );
  • $str=JsonSerialize::SerializeVAR($array);
  • ?>
  • <html>
  • <head>
  • </head>
  • <body>
  • <script type="text/javascript">
  • window.onload=function(){
  • var json=(<?php echo $str; ?>);
  • printr=function(obj){
  • var div, ul, i;
  • div=document.createElement("div");
  • div.innerHTML="typeof = " + typeof(obj);
  • ul=document.createElement("ul");
  • for (i in obj){
  • if (i!="printr"){
  • li=document.createElement("li");
  • ul.appendChild(li);
  • try{
  • if (typeof(obj[i])=="object" && obj[i]!=null){
  • li.innerHTML=i+" => ";
  • li.appendChild(printr(obj[i]));
  • }else{
  • li.innerHTML=i+" => "+obj[i];
  • }
  • }catch (e){
  • li.innerHTML=e;
  • }
  • }
  • }
  • div.appendChild(ul);
  • return div;
  • }
  • document.body.appendChild(printr(json));
  • }
  • </script>
  • </body>
  • </html>
<?php
/**
* @file JsonSerializa.php
* @brief un exemple de code de conversion d'objets ou de variable d'une maniere plus generale, en json
*/

/**
* @brief l'Exception
* @author coucou747 <coucou747@hotmail.com>
* @version 1.0
* @date 09-10-2007
*/
class JsonException extends Exception{

}
/**
* @brief l'interface qui doit etre implementee par les classes de tout object qui veut avoir une representation json
* @author coucou747 <coucou747@hotmail.com>
* @version 1.0
* @date 09-10-2007
*/
interface JsonAble{
	//! la fonction qui permet d'avoir l'equivalent de l'objet en json
	public function ToJson();
}
/**
* @brief un exemple d'object qui implemente JsonAble
* @author coucou747 <coucou747@hotmail.com>
* @version 1.0
* @date 09-10-2007
*/
class A implements JsonAble{
	//! la fonction qui permet d'avoir l'equivalent de l'objet en json
	public function ToJson(){
		return '{"test":'.JsonSerialize::SerializeVAR($this->str).'}';
	}
	//! un exemple
	public $str='test';
}
/**
* @brief la classe qui contient de quoi faire la conversion Variable php vers Json String.
* @author coucou747 <coucou747@hotmail.com>
* @version 1.0
* @date 09-10-2007
*/
class JsonSerialize{
	/*
	public static function SerializeINT($v){
		return $v;
	}
	public static function SerializeSTRING($v){
		return '"'.str_replace(array('"', '\\'), array('\\"', '\\\\'), $v).'"';
	}
	public static function SerializeBOOL($v){
		return $v?'true':'false';
	}
	public static function SerializeNULL($v){
		return 'null';
	}*/
	/**
	 * @brief fonction de conversion d'une chaine
	 * @param $v la valeur a convertir
	**/
	public static function SerializeSTRING($v){
		settype($v, 'string');
		return json_encode($v);
	}
	/**
	 * @brief fonction de conversion d'un array
	 * @param $v le tableau a convertir
	**/
	public static function SerializeARRAY($v){
		$out='[';
		foreach ($v as $k=>$s){
			$out.=self::SerializeVAR($s).', ';
		}
		$out=substr($out, 0, strlen($out)-2);
		$out.=']';
		return $out;
	}
	/**
	 * @brief fonction de conversion d'un object
	 * @param $v l'object a convertir
	 * @exception JsonException si l'object n'implemente pas JsonAble
	**/
	public static function SerializeOBJ($v){
		if ($v instanceof JsonAble){
			return $v->ToJson();
		}else{
			throw new JsonException('Object ne peut-etre converti en donnees json');
		}
	}
	/**
	 * @brief fonction de conversion d'une hashmap (ca se fait comme un object)
	 * @param $v la hashmap a convertir
	**/
	public static function SerializeHASHMAP($v){
		$out='{';
		foreach ($v as $k=>$s){
			$out.=self::SerializeSTRING($k).':'.self::SerializeVAR($s).', ';
		}
		$out=substr($out, 0, strlen($out)-2);
		$out.='}';
		return $out;
	}
	/**
	 * @brief dit si le parametre est une hashmap
	 * @param $v tableau
	 * @bug $v doit-etre un tableau ou assimile, sinon, ca va provoquer plein de notices
	**/
	private static function isHashMap($t){
		foreach ($t as $a=>$b){
			if (gettype($a)!='integer') return true;
		}
		return false;
	}
	/**
	 * @brief fonction de conversion d'une variable
	 * @param $v la valeur a convertir
	**/
	public static function SerializeVAR($v){
		$t=gettype($v);
		if ($t=='object'){
			return self::SerializeOBJ($v);
		}else if ($t=='array'){
			if (self::isHashMap($v))
				return self::SerializeHASHMAP($v);
			else
				return self::SerializeARRAY($v);
		}else{
			return json_encode($v);
		}
		/*else if ($t=='integer'){
			return self::SerializeINT($v);
		}else if ($t=='string'){
			return self::SerializeSTRING($v);
		}else if ($t=='boolean'){
			return self::SerializeBOOL($v);
		}else if ($t=='NULL'){
			return self::SerializeNULL($v);
		}*/
	}
}

$array=array(
	'test'=>array(1, 2, 3, "test", "test", NULL, false, true, new A()),
	'test'
);


$str=JsonSerialize::SerializeVAR($array);

?>
<html>
	<head>
	</head>
	<body>
	<script type="text/javascript">
		window.onload=function(){
			var json=(<?php echo $str; ?>);
			printr=function(obj){
				var div, ul, i;
				div=document.createElement("div");
				div.innerHTML="typeof = " + typeof(obj);
				ul=document.createElement("ul");
				for (i in obj){
					if (i!="printr"){
						li=document.createElement("li");
						ul.appendChild(li);
						try{
							if (typeof(obj[i])=="object" && obj[i]!=null){
								li.innerHTML=i+" => ";
								li.appendChild(printr(obj[i]));
							}else{
								li.innerHTML=i+" => "+obj[i];
							}
						}catch (e){
							li.innerHTML=e;
						}
					}
				}
				div.appendChild(ul);
				return div;
			}
			document.body.appendChild(printr(json));
		}
	</script>
	</body>
</html>

 Conclusion

il existe deux fonctions de base de php (5) pour gerer json, seulement elles ne permettent pas de personaliser selon le type d'object (on peut alors passer tout plein de choses inutiles)

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

Source avec une capture IMAGES GENETIQUES
Source avec Zip Source avec une capture RUBIX CUBE
Source avec Zip INTERPRETEUR BRAINFUCK
Source avec Zip PROXY HTTP : SAUVEZ VOS VIDEOS PREFEREES.
Source avec une capture ECRIRE UN TEXTE EN CERCLE SUR UNE IMAGE

 Sources de la même categorie

Source avec Zip Source avec une capture PHPJSVFORM : DES CLASSES PHP, DES JAVASCRIPTS POUR CRÉER FAC... par synanceia
BOUTON POUR SITE WEB PAYMENT par Tom56340
Source avec Zip Source avec une capture PETIT CLIENT + AJAX + PHP par kiki67100
Source avec Zip Source avec une capture BOÎTE À ONGLETS / MENUS ET SOUS-MENUS / JAVASCRIPT / PHP / D... par Heirem
Source avec Zip Source avec une capture JUKEBOX EN LIGNE par Flachy Joe

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture TODO LIST (AJAX/PHP5) par VinceMonkeyz
Source avec Zip Source avec une capture ONGLET GÉNÉRÉ EN PHP ET REQUETE AJAX par djmmix
Source avec Zip MAJAX UN TOOLS (AJAX EN PHP) par michelsto
Source avec Zip Source avec une capture AJAX MAP CREATOR : CARTE INTERACTIVE POUR UN JEU EN PHP & JA... par djine
Source avec Zip Source avec une capture GALERIE AJAX ET REDIMENSIONNEMENT D'IMAGE EN PHP par nuchoon

Commentaires et avis

Commentaire de malalam le 11/11/2007 09:37:16 administrateur CS

Hello,

l'idée est de toute manière très bonne.
Je n'ai pas encore testé pour essayer de voir ce que ton typage induit exactement, donc je ne note pas tout de suite. Mais en tous cas, améliorer l'implémentation du json dans php est une bonne chose à l'heure de la mode du web 2.0 ;-)
Sinon, c'est très bien codé, évidemment.

Commentaire de coucou747 le 16/11/2007 15:36:34 administrateur CS

c'est directement inspire du modele de serialization en java :

public class ... implements Serializable {
   private void writeObject(ObjectOutputStream out) throws IOException {...}
   private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {...}
}

Commentaire de coucou747 le 09/04/2008 20:35:38 administrateur CS

du coup t'as pas note :(

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Ajax....et javascript [ par chmod777 ] Bonjour &#224; tous!mon probl&#232;me est le suivant: lorsque je charge via une fonction AJAX le contenu d'une page html dans un div (genre mondiv.inn XmlHttpRequest (AJAX) [ par BenXbox ] Salut à tous, Je cherche à actualiser une page avec le XmlHttpRequest(AJAX) toutes les 20 secondes. Cette page s'appel EnLigne.php Merci d'avance. javascript [ par barcawi ] bonjour,j'ai crée un timer en javascript qui execute une requette  Ajax. la reponse d'Ajax contien des balises   javascript et HTML,le probleme se res conversion d'un tab javascript en tab php [ par nacer183 ] bonjour, j'ai veux convertir un tableau déclaré en javascript en un tableau php et lui afficher .. Upload d'images : prévisualisation avant upload avec php+ajax+javascript [ par amewole ] Bonjour à vous tous, Je suis à la recherche d'un script php+ajax+javascript permettant de faire un preview des images avant le upload c'est à dire qu Pb de sécurité avec Ajax et XMLHttpRequest [ par cz1702 ] Bonjour &#224; tous,est il possible d'ouvrir une page sur un autre domaine que celui du site en cours avec XMLHttpRequest (sans contraindre l'utilisat AJAX PHP send var [ par cedriclomb ] Bonjour,Bon la j'y pige que couik !Alors voila le problème, je cherche a envoyer un fomulaire à PHP avec AJAX et une méthode POST, j'ai fait des reche Menu Treeview en PHP (Javascript ou Ajax) [ par thebayo ] Bonsoir, J'ai besoin de votre aide. Malgrés toute mes recherches je tourne autour mais je n arrive pas vraiment a faire ce que je souhaite faire. Je [DEBAT] Requête Ajax > Template & view en Javascript ou en PHP [ par destiny ] Bonjour, J'aimerai lancer un débat sur un principe fondamentale du futur logiciel que je vais faire pour ma boite. Ce logiciel aurai pour fonctionnem Client IRC en PHP AJAX (ou Javascript) [ par OscarWell ] Bonjour, Je suis à la recherche d'un client IRC entièrement écrit en PHP / AJAX. Je ne veux surtout pas un client en Flash ou Applet Java. J'ai beau


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,733 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales