PHP 陣列轉 JSON 有兩種新方法:JsonSerializable 介面: 允許物件定義自己的 JSON 表示形式。 JSONEncodeReplaceFlags: 控制特殊字元的處理,如 JSON_UNESCAPED_UNICODE 不轉義 Unicode 轉義序列。
解析 PHP 陣列轉 JSON 的新方法
在 PHP 中轉換陣列為 JSON 字串是常見的任務。傳統的 json_encode()
函數提供了這種功能,但近年來,有一些新方法出現,它們提供了額外的功能和效能優勢。
JsonSerializable 介面
PHP 5.4 引入了 JsonSerializable
接口,它允許物件定義其自己的 JSON 表示形式。要實作此接口,物件必須實作一個 jsonSerialize()
方法,該方法會傳回要轉換為 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 ]; } }
可以使用json_encode()
函數將Person
物件轉換為JSON,如下所示:
$person = new Person('John Doe', 30); $json = json_encode($person);
#jsonSerialize( )
方法將用於產生JSON 表示形式,從而提供對轉換過程的更多控制。
JSONEncodeReplaceFlags
PHP 7.4 引入了 JSONEncodeReplaceFlags
選項,它允許在轉換過程中控制對特殊字元的處理。此選項可與json_encode()
函數一起使用,如下所示:
$array = ['a' => "\u00A0", 'b' => "\n"]; $json = json_encode($array, JSON_UNESCAPED_UNICODE);
在此範例中,JSON_UNESCAPED_UNICODE
標誌用於保留轉義序列,從而生成以下JSON:
{ "a": "\u00A0", "b": "\n" }
實戰案例:RESTful API
#在建構RESTful API 時,經常需要將PHP 陣列轉換為JSON 以回應客戶端請求。以下是一個使用JsonSerializable
介面和JSON_UNESCAPED_SLASHES
標誌的範例:
header('Content-Type: application/json'); class User implements JsonSerializable { // ... } $user = new User(...); $json = json_encode($user, JSON_UNESCAPED_SLASHES); echo $json;
此程式碼將產生一個不轉義正斜線的JSON 回應,使其適合於包含URL 或路徑的回應。
以上是解析 PHP 數組轉 JSON 的新方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!