Maison  >  Article  >  développement back-end  >  Partager comment utiliser json_decode et json_encode en PHP

Partager comment utiliser json_decode et json_encode en PHP

小云云
小云云original
2018-03-01 14:05:281414parcourir

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); 

et le résultat est

{"a":1,"b":2,"c":3,"d":4,"e":5} 

. 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); 
et le résultat est

{    
    "body":"another post",  
  "id":21,  
  "approved":true,  
  "favorite_count":1,  
  "status":null  
  }
É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); 
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); 
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 ); 
ou

json_encode ( $arr, JSON_FORCE_OBJECT ); 
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;  
    }  
  }
Maintenant, effectuez une conversion json sur l'instance de cette classe :

$foo = new Foo;  $foo_json = json_encode($foo);  echo $foo_json; 
Le résultat de sortie est

{"public_ex":"this is public"}
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 
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));
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)  
} 
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)); 
Le résultat est un tableau associatif :

array(5) {  
   ["a"] => int(1)     ["b"] => int(2)     ["c"] => int(3)     ["d"] => int(4)     ["e"] => int(5)  
} 
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", }'; 
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 + ')');
ou

var obj = str.parseJSON(); //由JSON字符串转换为JSON对象
ou

var obj = JSON.parse(str); //由JSON字符串转换为JSON对象
Ensuite, vous pouvez le lire comme ceci :

Alert(obj.name);Alert(obj.sex);
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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn