自从PHP5.2开始的这个版本增加了对JSON的支持。主要包含两个函数:json_encode和json_decode。
JSON是一种数据的存储格式,就像PHP序列化后的字符串一样。也是一种数据描述,比如我们将一个数组序列化后存放,就可以很容易的反序列化后应用。JSON也是如此,只不过他搭建的是客户端Javascript和服务端PHP的交互桥梁。我们用PHP生成JSON后的字符串,然后把这个字符串传给前台Javascript,Javascirpt就可以很容易的将其反JSON然后应用。
以下是举例:
有文件:brand1.json,内容如下,通过观察就会发现JSON的格式很像数组:
以下是PHP代码:
以上代码通过PHP的文件操作读取brand1.json文件,读取到的是brand1.json文件中的字符串内容,再通过第3行json_decode将此字符串解码,返回对象为数组对象。print_r($obj)打印的结果如下:
通过输出的结果可以看出的确是数组,brand1.json中的两个元素分别被生成为两个stdClass Object对象放在数组中,在程序中输出对象的值是通过调用对象的属性来获取,如:$obj[$i]->cName。还有一种情况,第3行代码改为:$obj = json_decode($content,true); 可以将取出的JSON对象直接转变成数组而不是stdClass Object对象,以下是第4行代码输出的结果:
和上图对比,会发现存储于数组中的不再是stdClass Object,而是Array。我们需要注意的是:在取出数据时就要换数组的方式来取值:$obj[$i]['cName'],而不能再用对象访问属性的方式来得到数据,如:$obj[$i]->cName,虽然不报错,但你什么都取不到。我们倒过来说,如果我们用了第一种方式解析数据,我们就只能用$obj[$i]->cName来访问数据,如果换成$obj[$i]['cName'],那就会有错误信息等着你了:
Fatal error: Cannot use object of type stdClass as array in D:/wamp/www/cj/data/test.php on line 8
错误信息已经把问题描述得很清楚了,仅此而已,在不同的场合选择合适的方式,没有其他区别。