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

Partager comment utiliser json_decode et json_encode en PHP

小云云
Libérer: 2023-03-20 15:54:01
original
1459 Les gens l'ont consulté

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal