首頁 >後端開發 >PHP問題 >php數組怎麼轉換成json並去掉雙引號

php數組怎麼轉換成json並去掉雙引號

PHPz
PHPz原創
2023-04-27 09:06:341351瀏覽

在 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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn