在 PHP 中,將陣列轉換為 JSON 格式可以透過 json_encode
函數實現,這個函數接受一個參數 $value
,將其轉換為 JSON 格式的字串。但是,在預設情況下,json_encode
函數會在產生 JSON 字串時會將物件的屬性名稱用雙引號包裹起來,這會影響一些前端框架的使用。那麼,如何讓 json_encode
函數去掉產生的 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 字串中的屬性名稱已經移除了雙引號。
總結:
使用 PHP 自帶的 json_encode
函數將陣列轉換為 JSON 字串是非常方便的。但是,在某些情況下,JSON 字串中的屬性名稱需要移除雙引號。這時,我們可以使用 PHP 反射機制來達成這個目標。
以上是php數組怎麼轉換成json並去掉雙引號的詳細內容。更多資訊請關注PHP中文網其他相關文章!