PHP中的json,對於一些有經驗的開發者來說,通常是非常常見的東西。而在PHP中處理json數據,常常需要使用一些關於數組的操作,例如處理鍵值對。但是,有時候,我們會遇到這樣一種情況:處理一個非數組結構的json數據,那麼我們該如何指定key呢?
我們先來看看PHP中處理json資料的一些基礎。
在PHP中處理json,通常分成兩個方向:把PHP陣列轉換成json字串,和將json字串轉換為PHP陣列。
首先,我們來看看陣列轉json的情況。在PHP中,有一個非常好用的函數 json_encode
可以把一個PHP陣列轉換成json格式的字串。
例如,假設我們有如下數組:
$arr = array("name" => "Tom", "age" => 28, "gender" => "male");
如果我們想要將這個陣列轉換為json,可以這樣寫:
$jsonStr = json_encode($arr); echo $jsonStr;
輸出結果:
{"name":"Tom","age":28,"gender":"male"}
這裡可以看到,原本的PHP陣列已經成功地轉換為了一個json格式的字串。同時,也可以看到,JSON資料是一種鍵值對的結構。
接下來,我們再看一下json轉數組的情況。在PHP中,有一個非常好用的函數 json_decode
可以把一個json格式的字串轉換成PHP陣列。
例如,假設我們有如下json資料(假設我們將上一個範例中產生的json字串存到檔案data.json
):
{"name":"Tom","age":28,"gender":"male"}
如果我們想要讀取這個json資料並轉換成PHP數組,可以這樣寫:
$jsonStr = file_get_contents("data.json"); $arr = json_decode($jsonStr, true); var_dump($arr);
輸出結果:
array(3) { ["name"] => string(3) "Tom" ["age"] => int(28) ["gender"] => string(4) "male" }
可以看到,原來的json格式的字串已經成功地轉換為了PHP數組。
進一步說,如果我們只需要取出其中某一個值,通常我們會使用類似以下的方式,使用陣列的key來取出對應的value:
echo $arr['name']; // 输出 Tom
但是,我們回到最開始提出的問題:假設我們讀取到的json資料結構如下:
{ "status":1, "data":{ "name":"Tom", "age":28, "gender":"male" } }
這時,如果我們想要取出其中的name
值,會怎麼做呢?
通常,我們會想到以下的程式碼:
$jsonStr = file_get_contents("data.json"); $arr = json_decode($jsonStr, true); echo $arr['data']['name'];
但是,這樣的程式碼會出現一個Notice錯誤:
Notice: Undefined index: data in ...
這是因為PHP認為$arr
是一個數組,但是我們卻試圖像處理JSON資料中的數組一樣去存取data
,這時它會被識別為一個字串而不是數組。
為了解決這個問題,我們需要使用$arr->data->name
# 的方式指定key:
$jsonStr = file_get_contents("data.json"); $obj = json_decode($jsonStr); echo $obj->data->name;
這樣就可以正確輸出:Tom
。這裡,注意我們建立的物件是 stdClass
類型的,而不是陣列類型,所以我們需要使用 $obj->data->name
的方式來指定key。
總結一下,當我們處理非陣列結構的JSON資料時,需要使用物件來處理,而不是陣列。同時,我們也可以使用該方式來遍歷非陣列結構的JSON資料。
以上是php怎麼處理json數據的詳細內容。更多資訊請關注PHP中文網其他相關文章!