Lorsque nous utilisons json_encode() en PHP pour convertir un tableau en chaîne JSON, nous rencontrons parfois un problème. Quelle que soit la manière dont nous opérons, la chaîne JSON convertie sera vide. Ce problème peut être frustrant, mais sa solution est simple.
Localisez le problème
Tout d'abord, nous devons trouver le problème. Nous pouvons utiliser la fonction var_dump() pour afficher le contenu du tableau et vérifier s'il y a des exceptions ou les données que nous attendons.
Par exemple :
<?php $arr = array("name" => "John", "age" => 30, "city" => "New York"); var_dump($arr); echo json_encode($arr); ?>
Ce code affichera ce qui suit :
array(3) { ["name"]=> string(4) "John" ["age"]=> int(30) ["city"]=> string(8) "New York" }
Ensuite, nous essayons d'utiliser json_encode() pour convertir le tableau en chaîne JSON. En conséquence, nous obtenons une chaîne vide. Ce résultat nous a surpris et nous a fait remettre en question notre propre niveau de compétence.
Dépannage
Ensuite, résolvons le problème étape par étape.
La fonction json_encode() de PHP nécessite que les données d'entrée soient codées en UTF-8. S'il y a des caractères codés non UTF-8 dans le tableau, la conversion en chaîne JSON échouera.
Vous pouvez convertir les chaînes du tableau en codage UTF-8 via la fonction iconv() ou mb_convert_encoding(). Par exemple :
<?php $arr = array("name" => "John", "age" => 30, "city" => "New York"); foreach($arr as &$value){ $value = mb_convert_encoding($value, 'UTF-8', 'auto'); } echo json_encode($arr); ?>
La spécification JSON n'autorise pas les valeurs nulles. Par conséquent, si le tableau contient des valeurs nulles, l'utilisation de json_encode() entraînera l'échec de la conversion et renverra null.
À ce stade, vous pouvez utiliser la fonction array_map() pour remplacer la valeur nulle dans le tableau par une chaîne vide. Par exemple :
<?php $arr = array("name" => "John", "age" => null, "city" => "New York"); $arr = array_map(function($value){ return $value !== null ? $value : ''; },$arr); echo json_encode($arr); ?>
Le nom de clé dans JSON doit être de type chaîne, ce qui signifie que le nom de clé dans le tableau doit être une chaîne. Si vous utilisez des nombres comme clés, vous rencontrerez des problèmes pour utiliser la fonction json_encode().
Dans l'exemple suivant, lorsque nous utilisons la fonction json_encode(), le résultat est une chaîne vide :
<?php $arr = array(0=>'apple',1=>'banana',2=>'orange'); echo json_encode($arr); ?>
À ce stade, vous devez changer le nom de la touche numérique en un type de chaîne. Par exemple :
<?php $arr = array('0'=>'apple','1'=>'banana','2'=>'orange'); echo json_encode($arr); ?>
S'il y a une référence de cycle infini dans le tableau, la fonction json_encode() ne pourra pas traiter le tableau et renvoyer un chaîne vide. Si votre tableau contient des relations d'auto-référence imbriquées, vous rencontrerez certainement ce problème lors de l'utilisation de json_encode().
Tout en résolvant ce problème, vous devez vous assurer que votre baie peut être sérialisée. Autrement dit, vous devez remplacer toutes les références d'objet par des types de données sérialisables. Par exemple :
<?php $arr = array(); $item1 = array('id'=>1,'name'=>'apple'); $item2 = array('id'=>2,'name'=>'banana'); $item1['next'] = &$item2; $item2['prev'] = &$item1; $item3 = array('id'=>3,'data'=>array_merge($item1,$item2)); $arr[] = $item1; $arr[] = $item2; $arr[] = $item3['data']; echo json_encode($arr); ?>
Dans cet exemple, nous créons un tableau contenant des relations autoréférentielles. Afin de résoudre le problème, nous avons modifié la référence de l'objet en un type de données sérialisable, ce qui a évité le problème des cycles de référence infinis et nous a permis de convertir avec succès le tableau en chaîne JSON.
Résumé
Ne paniquez pas lorsque vous rencontrez une chaîne JSON vide lors de l'utilisation de json_encode() en PHP. En suivant les quatre méthodes ci-dessus, vous pouvez facilement résoudre ce problème. Veuillez vous assurer que le tableau est codé en UTF-8, que le tableau ne contient pas de valeurs nulles, que les noms de clés dans le tableau sont valides et qu'il n'y a pas de références circulaires infinies dans le tableau. Vous pouvez volontiers utiliser json_encode(. ) pour convertir votre tableau converti avec succès en chaîne JSON.
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!