2013-07-22 23 views
3

我有以下一段代碼:json_decode不工作對我的變量,但就其內容

$param = $params[0]; 
var_dump($param->getValue()); 
$test = json_decode($param->getValue()); 
var_dump($test); 

我第一次的var_dump返回如下:

string(133) ""[{\"lang_id\": \"1\", \"naam\": \"dsfsdfds\", \"mail\": \"dsfdsfs\"}, {\"lang_id\": \"1\", \"naam\": \"dfsd\", \"mail\": \"dfds\"}]"" 

的Seconde系列之一返回以下:

string(107) "[{"lang_id": "1", "naam": "dsfsdfds", "mail": "dsfdsfs"}, {"lang_id": "1", "naam": "dfsd", "mail": "dfds"}]" 

和值保存在我的數據庫是這樣的:

"[{\"lang_id\": \"1\", \"naam\": \"dsfsdfds\", \"mail\": \"dsfdsfs\"}, {\"lang_id\": \"1\", \"naam\": \"dfsd\", \"mail\": \"dfds\"}]" 

現在我的問題是:爲什麼它在json_decode之後返回一個字符串? 我絕對不知道我在做什麼錯了,奇怪的是,如果我替換該變量的實際值的變量,則解碼是正確的:

$test = json_decode("[{\"lang_id\": \"1\", \"naam\": \"dsfsdfds\", \"mail\": \"dsfdsfs\"}, {\"lang_id\": \"1\", \"naam\": \"dfsd\", \"mail\": \"dfds\"}]"); 

回報

array(2) { 
    [0]=> object(stdClass)#3255 (3) { 
     ["lang_id"]=> string(1) "1" 
     ["naam"]=> string(8) "dsfsdfds" 
     ["mail"]=> string(7) "dsfdsfs" 
    } 
    [1]=> object(stdClass)#3256 (3) { 
     ["lang_id"]=> string(1) "1" 
     ["naam"]=> string(4) "dfsd" 
     ["mail"]=> string(4) "dfds" 
    } 
} 

我做錯了什麼?

回答

4

因爲你的字符串被json_encoded兩次,所以你需要解碼兩次。

string(133) ""[{\"lang_id\": \"1\", \"naam\": \"dsfsdfds\", \"mail\": \"dsfdsfs\"}, {\"lang_id\": \"1\", \"naam\": \"dfsd\", \"mail\": \"dfds\"}]"" 

如果您在字符串中尋找你上面看到,所有他的報價被轉義,並且有一個雙引號的開始和結束。所以這意味着如果你解碼你得到一個字符串withouth引號。

如果再次解碼,字符串將被解碼爲數組。

json_decode('"[12,24,32]"'); //php string: [12,24,32] 
json_decode('[12,24,32]'); //php array(12, 24, 32); 
0

問題是您的整個字符串都用引號括起來。

它是一個JSON字符串,但它是一個JSON字符串,它只包含一個字符串變量......該字符串變量本身包含一個有效的JSON字符串,但就JSON解碼而言,該事實是無關緊要的;它只能看到JSON是單個字符串變量。

你可以通過在解碼輸出上做一個json_decode()來證明這一點:然後你應該得到你期望的數組。

它看起來好像你的數據是以某種方式被雙重編碼的。因此,儘管進行第二次解碼會給你想要的結果,但我建議不要試圖通過雙重解碼來解決問題,而應該嘗試找出雙重編碼發生的位置並解決該問題。

希望有所幫助。

0

你的刺痛不是一個有效的JSON(逃脫引號)。

$atring = '[{"lang_id": "1", "naam": "dsfsdfds", "mail": "dsfdsfs"}, {"lang_id": "1", "naam": "dfsd", "mail": "dfds"}]'; 

使用JSON Fromatter工具來檢查您的字符串是否爲有效的json。 http://jsonformatter.curiousconcept.com/