json_decode et json_encode sont tous deux des chaînes json. Cet article explique principalement comment utiliser json_decode et json_encode en PHP.
1. json_encode()
Cette fonction est principalement utilisée pour convertir des tableaux et des objets au format json. Regardons d'abord un exemple de conversion de tableau :
$arr = array ('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5); echo json_encode($arr);
Copier après la connexion
et le résultat est
{"a":1,"b":2,"c":3,"d":4,"e":5}
Copier après la connexion
. Regardons ensuite un exemple de conversion d'objet :
$obj->body = 'another post'; $obj->id = 21; $obj->approved = true; $obj->favorite_count = 1; $obj->status = NULL;
echo json_encode($obj);
Copier après la connexion
et le résultat est
{
"body":"another post",
"id":21,
"approved":true,
"favorite_count":1,
"status":null
}
Copier après la connexion
Étant donné que json n'accepte que les caractères codés en utf-8, les paramètres de json_encode() doivent être codés en utf-8, sinon vous obtiendrez des caractères vides ou nuls. Lorsque le chinois utilise le codage GB2312 ou que les langues étrangères utilisent le codage ISO-8859-1, une attention particulière doit être portée à ce point.
Tableau indexé et tableau associatif
PHP prend en charge deux types de tableaux, l'un est un tableau indexé qui enregistre uniquement la "valeur" (valeur) et l'autre est un tableau indexé qui enregistre le "nom value" Un tableau associatif de paires (nom/valeur).
Étant donné que javascript ne prend pas en charge les tableaux associatifs, json_encode() convertit uniquement le tableau indexé au format tableau et convertit le tableau associatif au format objet.
Par exemple, il existe maintenant un tableau d'index
$arr = Array('one', 'two', 'three'); echo json_encode($arr);
Copier après la connexion
Le résultat est :
["un", "deux", "trois"]
Si vous le changez en tableau associatif :
$arr = Array('1'=>'one', '2'=>'two', '3'=>'three');echo json_encode($arr);
Copier après la connexion
le résultat change :
{"1":"un","2":"deux","3 " : trois »>
Notez que le format des données est passé de « [] » (tableau) à « {} » (objet).
Si vous devez forcer "tableau d'index" dans "objet", vous pouvez écrire comme ceci
json_encode( (object)$arr );
Copier après la connexion
ou
json_encode ( $arr, JSON_FORCE_OBJECT );
Copier après la connexion
conversion de classe
Ce qui suit est une classe PHP :
class Foo {
const ERROR_CODE = '404';
public $public_ex = 'this is public';
private $private_ex = 'this is private!';
protected $protected_ex = 'this should be protected';
public function getErrorCode() {
return self::ERROR_CODE;
}
}
Copier après la connexion
Maintenant, effectuez une conversion json sur l'instance de cette classe :
$foo = new Foo; $foo_json = json_encode($foo); echo $foo_json;
Copier après la connexion
Le résultat de sortie est
{"public_ex":"this is public"}
Copier après la connexion
Comme vous pouvez le constater, à l'exception des variables publiques (public), d'autres éléments (constantes, variables privées, méthodes, etc.) manquent.
2. json_decode()
Cette fonction est utilisée pour convertir le texte json dans la structure de données PHP correspondante. Voici un exemple :
$json = '{"foo": 12345}';
$obj = json_decode($json); print $obj->{'foo'}; // 12345
Copier après la connexion
Normalement, json_decode() renvoie toujours un objet PHP, pas un tableau. Par exemple :
$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';
var_dump(json_decode($json));
Copier après la connexion
Le résultat est de générer un objet PHP :
object(stdClass)#1 (5) { ["a"] => int(1) ["b"] => int(2) ["c"] => int(3) ["d"] => int(4) ["e"] => int(5)
}
Copier après la connexion
Si vous souhaitez forcer la génération d'un tableau associatif PHP, json_decode() doit ajouter un paramètre vrai :
$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';
var_dump(json_decode($json,true));
Copier après la connexion
Le résultat est un tableau associatif :
array(5) {
["a"] => int(1) ["b"] => int(2) ["c"] => int(3) ["d"] => int(4) ["e"] => int(5)
}
Copier après la connexion
Erreurs courantes de json_decode()
Les trois façons suivantes d'écrire json sont toutes fausses . Pouvez-vous voir où est l'erreur ?
$bad_json = "{ 'bar': 'baz' }";
$bad_json = '{ bar: "baz" }';
$bad_json = '{ "bar": "baz", }';
Copier après la connexion
L'exécution de json_decode() sur ces trois chaînes renverra null et signalera une erreur.
La première erreur est que le délimiteur json autorise uniquement l'utilisation de guillemets doubles, pas de guillemets simples. La deuxième erreur est que le "nom" (la partie à gauche des deux points) de la paire nom-valeur json doit dans tous les cas être mis entre guillemets. La troisième erreur est que vous ne pouvez pas ajouter une virgule après la dernière valeur.
De plus, json ne peut être utilisé que pour représenter des objets et des tableaux. Si json_decode() est utilisé sur une chaîne ou une valeur, null sera renvoyé.
3. JavaScript utilise une chaîne json
Méthode pour convertir une chaîne JSON en objet JSON
Utilisez d'abord la méthode suivante pour convertir en objet JSON :
//由JSON字符串转换为JSON对象var obj = eval('(' + str + ')');
Copier après la connexion
ou
var obj = str.parseJSON(); //由JSON字符串转换为JSON对象
Copier après la connexion
ou
var obj = JSON.parse(str); //由JSON字符串转换为JSON对象
Copier après la connexion
Ensuite, vous pouvez le lire comme ceci :
Alert(obj.name);Alert(obj.sex);
Copier après la connexion
Note spéciale : si obj est à l'origine un objet JSON , puis après avoir utilisé la fonction eval() pour convertir (même plusieurs conversions), ce sera toujours un objet JSON, mais il y aura des problèmes après avoir utilisé la fonction parseJSON() pour le traiter (en lançant une exception de syntaxe).
Recommandations associées :
Solution au problème selon lequel json_decode ne peut pas analyser le caractère de point d'interrogation spécial en PHP
Comment PHP implémente json_decode Méthode chinoise sans évasion Introduction
Comparez la différence entre json_encode et json_decode
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!