目前,JSON格式已成为众多数据交换方式中的佼佼者,众多网站的API服务几乎普遍接纳并支持这一格式。
自5.2版本起,PHP原生库中引入了两个函数,一个用于数据编码,另一个则用于数据解码。
一、()
此函数主要用于将数组与对象转化为JSON格式。以下是一个数组转换的示例:
定义数组 $arr,其元素包括键 'a' 对应值 1,键 'b' 对应值 2,键 'c' 对应值 3,键 'd' 对应值 4,以及键 'e' 对应值 5。
echo ($arr);
结果为
该对象包含五个键值对,其中键“a”对应的值为1,键“b”对应的值为2,键“c”对应的值为3,键“d”对应的值为4,键“e”对应的值为5。
再看一个对象转换的例子:
$obj->body = ' post';
$obj->id = 21;
$obj-> = true;
$obj-> = 1;
$obj-> = NULL;
echo ($obj);
结果为
"body":" post",
"id":21,
"":true,
"":1,
"":null
由于JSON格式仅能识别UTF-8编码的字符,因此括号内的参数必须采用UTF-8编码。若不遵循此规定,可能会导致输出结果为空字符或null。特别是在处理中文编码或外文采用ISO-8859-1编码时,这一点尤为关键。
二、索引数组和关联数组
PHP具备两种类型的数组功能,一类是仅存储"值"的索引数组,另一类则是保存"名值对"的关联数组。
由于系统不支持关联数组这一特性,因此在进行转换时,括号内的索引数组会被转换成数组形式,而关联数组则会转换成对象形态。
比如,现在有一个索引数组
创建数组 $arr,包含元素 'one'、'two' 和 'three'。
echo ($arr);
结果为:
"one","two","three"
如果将它改为关联数组:
定义数组 $arr,其包含以下键值对:键 '1' 对应值 'one',键 '2' 对应值 'two',键 '3' 对应值 'three'。
echo ($arr);
结果就变了:
该物品不得进行任何形式的修改,编号为一、二、三的特定部分亦不可更改。
注意,数据格式从""(数组)变成了"{}"(对象)。
如果你需要将"索引数组"强制转化成"对象",可以这样写
( ()$arr );
或者
( $arr, );
三、类(class)的转换
下面是一个PHP的类:
class Foo {
const = '404';
$ = 'this is ';
$ = 'this is !';
$ = 'this be ';
() {
self::;
现在,对这个类的实例进行json转换:
$foo = new Foo;
$ = ($foo);
echo $;
输出结果是
{"":"this is "}
观察可知,除了那些公开的变量之外,其他诸如常量、私有变量以及方法等元素均已消失不见。
四、()
此函数旨在实现json格式文本向PHP内部数据类型的转换。以下是一个具体的应用示例:
$json = '{"foo": 12345}';
$obj = ($json);
print $obj->{'foo'}; // 12345
通常情况下,()总是返回一个PHP对象,而不是数组。比如:
该JSON对象包含五个键值对,其中键“a”对应的值为1,键“b”对应的值为2,键“c”对应的值为3,键“d”对应的值为4,键“e”对应的值为5。
(($json));
结果就是生成一个PHP对象:
()#1 (5) {
=> int(1)
=> int(2)
=> int(3)
=> int(4)
=> int(5)
若需强制构建PHP的关联数组,必须添加一个参数值为true。
$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';
(($json),true);
结果就生成了一个关联数组:
array(5) {
=> int(1)
=> int(2)
=> int(3)
=> int(4)
=> int(5)
五、()的常见错误
下面三种json写法都是错的,你能看出错在哪里吗?
$ = "{ 'bar': 'baz' }";
$ = '{ bar: "baz" }';
$ = '{ "bar": "baz", }';
对这三个字符串执行()都将返回null,并且报错。
首个错误在于,在json格式中,分隔符号括号必须采用双引号,不可用单引号代替。其次,json中的名值对中,"名"部分即冒号左侧的内容,无论何种情形,都必须用双引号括起来。最后,需要注意的是,在序列的最后一个值之后,是不允许添加逗号的。
此外,JSON仅适用于表达对象以及数组,若将括号应用于字符串或数字,系统将输出null值。
(("Hello World")); //null
扫一扫在手机端查看
- 上一篇:Python _getattribute_ 异常调用顺序_python中_getattribute_异常后的调用顺序是什么?
- 下一篇:PHP函数防抖实现_如何使用PHP开发CMS中的在线调用API模块
我们凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求,请立即点击咨询我们或拨打咨询热线: 13761152229,我们会详细为你一一解答你心中的疑难。


客服1