2014-11-25 166 views
1

不知道我在做什麼錯在這裏,但我有我的JSON字符串,我試圖讓值IF語句
即打印出來: 63,52,55努力通過PHP瞭解JSON解析

這裏是我的代碼:

$jayjay = '{"items":{"cID":"63","qty":"2"},"items":{"cID":"52","qty":"1"},"items":{"cID":"55","qty":"1"}}'; 
echo $jayjay; 
$obj = json_decode($jayjay, TRUE); 
for($i=0; $i<=count($obj['items']); $i++) { 

    echo $obj['items'][$i]['cID']; 
    echo ","; 
}  

但輸出的只是空白,我無法弄清楚,爲什麼

任何幫助,將不勝感激。

謝謝

+0

通常情況下,這是因爲JSON數據中的語法錯誤。檢查'json_last_error'的結果。它可能正在返回'JSON_ERROR_SYNTAX' – 2014-11-25 00:04:12

+7

這似乎不是有效的JSON。這是一個帶有重複'items'鍵的對象,所以我期望輸出沒有被很好地定義。我認爲你期待'items'鍵的值是一個數組,但事實並非如此。無論如何它都會拋出錯誤 - 例如http://codepad.viper-7.com/KIFqba *和*沒有你的問題的'IF'語句。所以....修復所有這些東西,然後回來:) – Hamish 2014-11-25 00:05:04

+0

用'foreach($ obj ['items'] as&$ item){echo $ item ['cID'],',';}替換循環;} '它應該輸出'55,'。 – 2014-11-25 00:06:57

回答

2

的問題是,你有關鍵的「項目」,在你的JSON多時間,這是錯誤的。請注意,JSON密鑰對於格式良好的JSON必須是唯一的。

如果您使用多個具有相同名稱的密鑰,基本上不會出現錯誤,但在JSON中,具有相同名稱的最後一個密鑰是將要使用的密鑰。在你的情況下,關鍵的「項目」將是更好的包含對象的數組,因爲它的價值:

{'items' : [{"cID":"63","qty":"2"}, {"cID":"52","qty":"1"}, {"..." : "..."}]} 
+0

謝謝,你的JSON格式非常完美,現在我看到了我的錯誤。 – 2014-11-25 00:16:54

+0

歡迎您:) – Goran 2014-11-26 07:59:52

2

正如麥高在他的comment說,你不能有JSON作爲你提供。密鑰(在這種情況下爲items)將相互覆蓋,直到最後一個密鑰。

{"items":[{"cID":"63","qty":"2"}, {"cID":"52","qty":"1"},.....]} 

允許你itterate根據您的需要: 如果你創建了一個這樣的數組我的建議是。 這意味着你可以簡單的循環,你需要:

$items = json_decode($json, true); 
foreach($items as $thing){ 
    echo $thing['cID']; 
    echo ","; 
} 
+0

您的JSON仍然無效。你打開'['兩次,但只關閉一次。 – 2014-11-25 00:33:15

+0

@IsmaelMiguel很棒的地方!愚蠢的錯字早在一早。修復。 – Darren 2014-11-25 00:33:57

+0

不要擔心老兄,讓我們假裝我們沒有看到它,並沒有發生。每個人都會犯錯誤。 – 2014-11-25 00:36:35

0

正如已經指出的那樣,你的JSON數據格式不正確。

但是由於Stack Overflow是一種相當低效的語法檢查數據的方法,因此我建議將來在靜態JSON數據上使用JSON linter(如this one)。或者至少在分析後檢查返回值json_last_error以至少在測試或調試時查找潛在問題。