Maison >développement back-end >Problème PHP >Comment convertir un tableau php en json et supprimer les guillemets doubles
En PHP, la conversion d'un tableau au format JSON peut être réalisée via la fonction json_encode
. Cette fonction accepte un paramètre $value
et le convertit en chaîne au format JSON. Cependant, par défaut, la fonction json_encode
encapsulera le nom de l'attribut de l'objet entre guillemets doubles lors de la génération d'une chaîne JSON, ce qui affectera l'utilisation de certains frameworks front-end. Alors, comment faire en sorte que la fonction json_encode
supprime les guillemets doubles dans la chaîne JSON générée ? json_encode
函数实现,这个函数接受一个参数 $value
,将其转换为 JSON 格式的字符串。但是,在默认情况下,json_encode
函数在生成 JSON 字符串时会将对象的属性名用双引号包裹起来,这会影响一些前端框架的使用。那么,如何让 json_encode
函数去掉生成的 JSON 字符串中的双引号呢?
首先,我们来看一下 json_encode
函数默认生成的 JSON 字符串格式:
$arr = array('name' => '张三', 'age' => 18, 'gender' => 'male'); $jsonStr = json_encode($arr); echo $jsonStr;
上述代码的输出结果为:
{"name":"张三","age":18,"gender":"male"}
可以看到,JSON 字符串中的属性名都用双引号包裹起来了。
如果我们想去掉双引号,可以使用 PHP 的反射机制。如果读者不熟悉反射,可以在阅读本篇文章后再进行学习。
下面是一个实现将 JSON 字符串中的属性名去掉双引号的例子:
class JsonWithoutQuotes { public function __construct($data) { $this->originalData = $data; } public function getJson() { $data = $this->originalData; $jsonData = json_encode($data); $jsonData = preg_replace_callback( '/"(.*?)":/is', function($matches) { $match = $matches[1]; return is_string($match) ? $match.":" : $match; }, $jsonData); return $jsonData; } }
上面的代码中,我们使用了一个自定义的类 JsonWithoutQuotes
,它接收一个数组作为参数并将其保存在 $originalData
属性中。getJson
方法用于将 $originalData
中的数组转换成不包含双引号的 JSON 字符串:
首先,我们调用 json_encode
函数将原始数据转换为 JSON 字符串,然后使用 PHP 内置的正则表达式引擎 preg_replace_callback
方法将 JSON 字符串中的属性名用回调函数中返回的字符串替代。回调函数的作用是判断一个匹配到的字符串是否为字符串类型,如果是,就返回不包含双引号的字符串,如果不是,则原样返回该字符串。
$arr = array('name' => '张三', 'age' => 18, 'gender' => 'male'); $jsonStr = (new JsonWithoutQuotes($arr))->getJson(); echo $jsonStr;
实际运行效果:
{name:"张三",age:18,gender:"male"}
可以看到,现在 JSON 字符串中的属性名已经去除了双引号。
总结:
使用 PHP 自带的 json_encode
json_encode
par défaut : 🎜rrreee🎜Le résultat de sortie du code ci-dessus est : 🎜rrreee🎜Comme vous pouvez le voir, l'attribut les noms dans la chaîne JSON sont tous entourés de guillemets doubles. 🎜🎜Si nous voulons supprimer les guillemets doubles, nous pouvons utiliser le mécanisme de réflexion de PHP. Si le lecteur n'est pas familier avec la réflexion, vous pourrez en apprendre davantage après avoir lu cet article. 🎜🎜Ce qui suit est un exemple de suppression des guillemets doubles des noms d'attributs dans une chaîne JSON : 🎜rrreee🎜Dans le code ci-dessus, nous utilisons une classe personnalisée JsonWithoutQuotes
, qui reçoit un tableau en tant que paramètres et les enregistre dans l'attribut $originalData
. La méthode getJson
est utilisée pour convertir le tableau dans $originalData
en une chaîne JSON sans guillemets doubles : 🎜🎜Tout d'abord, nous appelons la fonction json_encode
Convertissez les données d'origine en chaîne JSON, puis utilisez la méthode preg_replace_callback
du moteur d'expression régulière intégré de PHP pour remplacer le nom de l'attribut dans la chaîne JSON par la chaîne renvoyée dans la fonction de rappel. La fonction de la fonction de rappel est de déterminer si une chaîne correspondante est de type chaîne. Si tel est le cas, renvoyez la chaîne sans guillemets doubles. Sinon, renvoyez la chaîne telle quelle. 🎜rrreee🎜Effet d'exécution réel : 🎜rrreee🎜Vous pouvez voir que les guillemets doubles ont été supprimés des noms d'attribut dans la chaîne JSON. 🎜🎜Résumé : 🎜🎜Il est très pratique d'utiliser la fonction json_encode
fournie avec PHP pour convertir un tableau en chaîne JSON. Cependant, dans certains cas, les noms de propriétés dans les chaînes JSON doivent être supprimés des guillemets doubles. À l’heure actuelle, nous pouvons utiliser le mécanisme de réflexion PHP pour atteindre cet objectif. 🎜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!