这篇“php数组如何转化为json并去掉双引号”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“php数组如何转化为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 字符串中的属性名已经去除了双引号。