Le format de données Json a été créé pour faciliter le transfert de données structurées entre le client et le serveur.
Pour convertir un tableau ou un objet en Json, il existe une fonction json_encode
en PHP :
$user = ['nom' => 'Jan','nom de famille' => 'Barasek','rôle' => ['Admin','modérateur',],];echo json_encode($user);
Ça va générer :
{"name":"Jan","surname":"Barasek","role":["admin","moderator"]}
La fonction json_encode()
peut également convertir d'autres types de données. Par exemple, nous pouvons insérer directement integer
(entier), string
(chaîne de caractères) et ainsi de suite.
Dans la configuration par défaut, json est généré comme une longue chaîne. Ceci afin de prendre le moins de place possible.
Si vous souhaitez une meilleure lisibilité, passez simplement la constante JSON_PRETTY_PRINT
comme deuxième paramètre :
echo json_encode($users, JSON_PRETTY_PRINT);
Ça va générer :
{"nom": "Jan","nom de famille": "Barasek","rôle": ["Admin","modérateur"]}
Le formatage normal de json via PHP n'a pas de paramètres supplémentaires et nous devons nous contenter de cette sortie. Par exemple, si nous voulons indenter les tabulations au lieu des espaces (ou modifier les règles de génération de quelque manière que ce soit), nous devons le programmer nous-mêmes.
Cette fonction peut déjà effectuer un formatage de base et nous devons simplement la modifier :
function prettyJsonPrint(string $json): string{$result = '';$level = 0;$in_quotes = false;$in_escape = false;$ends_line_level = NULL;$json_length = strlen($json);for ($i = 0; $i < $json_length; $i++) {$char = $json[$i];$new_line_level = NULL;$post = '';if ($ends_line_level !== NULL) {$new_line_level = $ends_line_level;$ends_line_level = NULL;}if ($in_escape) {$in_escape = false;} else if ($char === '"') {$in_quotes = !$in_quotes;} else if (!$in_quotes) {switch ($char) {case '}':case ']':$level--;$ends_line_level = NULL;$new_line_level = $level;break;case '{':case '[':$level++;case ',':$ends_line_level = $level;break;case ':':$post = '';break;case "":case "\t":case "\n":case "\r":$char = '';$ends_line_level = $new_line_level;$new_line_level = NULL;break;}} else if ($char === '\\') {$in_escape = true;}if ($new_line_level !== NULL) {$result .= "\n" . str_repeat("\t", $new_line_level);}$result .= $char . $post;}return $result;}
Source : https://stackoverflow.com/questions/6054033/pretty…
Par exemple, l'entrée :
{"Clé1":[1,2,3],"clé2":"valeur"}
Formaté comme :
{"Clé1": [1,2,3],"clé2": "valeur"}
Ce qui est beaucoup plus facile à lire (en raison de l'indentation cohérente de chaque élément).
Il peut parfois être utile de mettre en couleur les clés, les données elles-mêmes et les éléments de formatage individuels (en particulier les parenthèses fermantes).
Par exemple, l'entrée :
{"accès": {"jeton": {"issued_at": "2008-08-16T14:10:31.309353", "expirant à": "2008-08-17T14:10:31Z", "id": "MIICQgYJKoZIhvcIegeyJpc3N1ZWRfYXQiOiAi"}, "serviceCatalogue": [], "utilisateur": {"nom d'utilisateur": "ajay", "rôles_liens": [], "id": "16452ca89", "rôles": [], "nom": "ajay"}}}
Formaté comme :
{
"access": {
"token": {
"issued_at": "2008-08-16T14:10:31.309353",
"expire": "2008-08-17T14:10:31Z",
"id": "MIICQgYJKoZIhvcIegeyJpc3N1ZWRfYXQiOiAi"
.
},
"serviceCatalog":  ;[
[   ;],
"utilisateur": {
"username": "ajay",
"roles_links":  ;[
  ;],
<nbsp; <nbsp;: "16452ca89",
.
"rôles":  ;[
  ;],
"name": "ajay"
.
}
}
}
Ceci peut être mis en œuvre par la fonction suivante :
function jsonColorFormater(string $json, string $indentation = "\t"): string{$crl = 0;$ss = false;$buffer = '';for ($c = 0; $c < strlen($json); $c++) {if ($json[$c] == '}' || $json[$c] == ']') {$crl--;$buffer .= "\n" . str_repeat($indentation, $crl);}if ($json[$c] == '"' && (@$json[$c - 1] == ',' || @$json[$c - 2] == ',')) {$buffer .= "\n" . str_repeat($indentation, $crl);}if ($json[$c] == '"' && !$ss) {$buffer .= '<span style="color :'.((@$json[$c - 1] == ':' || @$json[$c - 2] == ':') ? '#35D' : '#C22').';">';}$buffer .= $json[$c];if ($json[$c] == '"' && $ss) $buffer .= '</span>';if ($json[$c] == '"') $ss = !$ss;if ($json[$c] == '{' || $json[$c] == '[') {$crl++;$buffer .= "\n". str_repeat($indentation, $crl);}}// Retourne la source HTMLreturn '<pre>' . $buffer . '</pre>';}// Appelez simplement cette fonction et renvoyez la sortie formatée// echo jsonColorFormater($data, ' ') ;
Fonctionnalité reprise et radicalement réécrite de : https://stackoverflow.com/a/20953262/6777550
Cela peut être mis en œuvre avec la fonction json_decode(), qui crée une structure de données à partir de Json avec laquelle nous devons travailler comme un objet :
$json = '{"nom" : "Jan", "nom de famille" : "Barasek", "rôle" :["admin", "modérateur"]}';$decode = json_decode($json);echo $decode->name; // Retourne 'Jan'.// echo $decode->role ;//// Ce n'est pas possible car le rôle de propriété// contient un tableau, nous devons l'itérer.echo '<ul>';foreach ($decode->role as $role) {echo '<li>' . $role . '</li>'; // Liste consécutivement les rôles derrière les puces.}echo '</ul>';
Par exemple, dans la bibliothèque jQuery, une chaîne json peut être analysée en objet très facilement :
var json = '{"nom" : "Jan", "nom de famille" : "Barasek", "rôle" :["admin", "modérateur"]}';var parser = $.parseJSON(json);document.write('Nom :' + parser.name);console.log(parser); // Imprime l'objet entier sur la console pour le débogage.
En javascript, en général, tout json est un objet javascript valide avec lequel on peut travailler directement et accéder à ses propriétés.
Jan Barášek Více o autorovi
Autor článku pracuje jako seniorní vývojář a software architekt v Praze. Navrhuje a spravuje velké webové aplikace, které znáte a používáte. Od roku 2009 nabral bohaté zkušenosti, které tímto webem předává dál.
Rád vám pomůžu:
Články píše Jan Barášek © 2009-2024 | Kontakt | Mapa webu
Status | Aktualizováno: ... | fr