在當(dāng)今互聯(lián)網(wǎng)時代,數(shù)據(jù)交互十分普遍。而隨著Web2.0時代的到來,Ajax和Web API成為了大量服務(wù)開發(fā)的選擇。而實現(xiàn)數(shù)據(jù)的交換與解析則需要我我們熟悉的JSON格式。而PHP5.6在這方面也做了很多優(yōu)化,方便開發(fā)人員更加便捷地實現(xiàn)JSON的交互和解析。
JSON(JavaScript Object Notation)是一種輕量級的數(shù)據(jù)交換格式,簡潔明了,易讀易寫,同時也易于機器解析和生成。在現(xiàn)代Web開發(fā)中很常用,例如RESTful API,JSON數(shù)據(jù)源等。
在PHP中,使用json_decode和json_encode兩個函數(shù),即可完成JSON的解析和編碼。例如以下JSON對象:
{ "name": "Tom", "age": 18, "skills": [ "PHP", "JavaScript", "HTML", "CSS" ] }可以通過以下PHP代碼進(jìn)行解析:
$jsonStr = '{"name":"Tom","age":18,"skills":["PHP","JavaScript","HTML","CSS"]}'; $jsonObj = json_decode($jsonStr); //獲取屬性值 echo $jsonObj->name; //"Tom" echo $jsonObj->age; //18 //獲取嵌套屬性值 echo $jsonObj->skills[0]; //"PHP" echo $jsonObj->skills[1]; //"JavaScript"而對于PHP5.6中的JSON,在解析和編碼時,還有更多有用的函數(shù)和方法。下面將詳細(xì)介紹其中的幾個函數(shù)和方法。 1. JSON_UNESCAPED_UNICODE 在JSON編碼時,如果需要支持中文字符集,可以使用JSON_UNESCAPED_UNICODE選項。例如:
$data = array('name' =>'李四', 'age' =>20); echo json_encode($data, JSON_UNESCAPED_UNICODE); //{"name": "李四", "age": 20}2. JSON_PRETTY_PRINT 在JSON編碼時,如果需要輸出格式化的JSON字符串,可以使用JSON_PRETTY_PRINT選項。例如:
$data = array('name' =>'Tom', 'age' =>18, 'skills' =>array('PHP', 'JavaScript', 'HTML', 'CSS')); echo json_encode($data, JSON_PRETTY_PRINT); /* { "name": "Tom", "age": 18, "skills": [ "PHP", "JavaScript", "HTML", "CSS" ] } */3. json_last_error_msg() 在JSON解析或編碼出錯時,可以使用json_last_error_msg()函數(shù)獲取錯誤信息。例如:
$data = '{"name": "Tom", "age": 18, "skills:}'; $jsonObj = json_decode($data); if (json_last_error()) { echo json_last_error_msg(); //"Syntax error" }4. JsonSerializable接口 在PHP5.6中,可以實現(xiàn)JsonSerializable接口,以控制對象如何被JSON編碼。例如:
class Person implements JsonSerializable { private $name; private $age; public function __construct($name, $age) { $this->name = $name; $this->age = $age; } public function jsonSerialize() { return [ 'name' =>$this->name, 'age' =>$this->age ]; } } $person = new Person('Tom', 18); echo json_encode($person); //{"name":"Tom","age":18}總之,在PHP5.6中,JSON的解析和編碼更加方便,同時還提供了更多有用的函數(shù)和方法。而且,隨著PHP7的到來,JSON的解析和編碼性能也有了進(jìn)一步提升。在接下來的開發(fā)中,相信JSON與PHP的結(jié)合將擁有更加廣泛的應(yīng)用。