2012-07-05 54 views
-1

我有以下的JSON字符串從節點JS服務回來:在PHP中解析JSON的正確方法是什麼?

"{\"success\":true,\"isavailable\":true}" 

當我嘗試使用在PHP我坐上的var_dump以下json_decode():

string '{"success":true,"isavailable":true}' (length=35) 

所以,我開始着手做到以下幾點:

$str = str_replace("\"{", "'{", $str); 
$str = str_replace("}\"", "}'", $str); 
$str = str_replace('\"','"',$str); 

當我做到這一點我從返回語法錯誤上次錯誤和NULL值。

那麼,在PHP中解析這個JSON字符串的正確方法是什麼?

+2

'json_decode'適用於我:http://codepad.org/LIBC8ihP – 2012-07-05 19:00:29

+0

'json_decode'僅在PHP 5.2.0 +中可用? – AlexLittlejohn 2012-07-05 19:03:43

+0

@AlexLittlejohn爲什麼你會使用5.2.0以上的版本? – Lusitanian 2012-07-05 19:07:19

回答

1

正確的解決辦法(假設輸入正是在OP)是使用trim()擺脫領先和尾隨雙引號調用stripslashes()後:現在

$str = '"{\"success\":true,\"isavailable\":true}"'; 
$str = trim(stripslashes($str), '"'); 
var_dump(json_decode($str)); 

you get

object(stdClass)#1 (2) { ["success"]=> bool(true) ["isavailable"]=> bool(true) } 

我也確認這串似乎是雙重編碼,因此它也可以用正確解碼:

$str = '"{\"success\":true,\"isavailable\":true}"'; 
var_dump(json_decode(json_decode($str))); 
+0

json_decode(stripslashes($ json_string));我猜也足夠了。看到的額外雙引號實際上並不是JSON字符串的一部分。 – Neo 2012-07-05 19:14:40

+0

@Neo - 如果沒有'trim()',[因爲我失敗](http://viper-7.com/w7y0v8) – nickb 2012-07-05 19:16:49

+0

,因爲你實際上在字符串中使用雙引號兩次。實際的字符串不會包含它兩次。 – Neo 2012-07-05 19:17:50

0

$parsed = json_decode($whatever);

+0

爲什麼downvote?這是第一個答案,它是正確的。 – Joe 2012-07-05 19:03:19

+0

我想知道同樣的事情...... – Lusitanian 2012-07-05 19:03:37

+4

@Joe:可能是因爲託德提到他嘗試過'json_decode',但它產生了一個字符串而不是一個對象。 – outis 2012-07-05 19:07:27

0

使用

json_decode(stripslashes($json_string)); 
+1

我使用這個時得到NULL。 – 2012-07-05 19:02:36

+0

$ a ='{\「success \」:true,\「isavailable \」:true}'; var_dump(json_decode(stripslashes($ a))); 這給出了正確的對象。 – Neo 2012-07-05 19:10:31

1
$obj = json_decode("{\"success\":true,\"isavailable\":true}"); 
echo $obj->success; 
echo $obj->isavailable; 

結果:

11 

這裏1代表true(在你的JSON實際值),如truthy值。

您可以在此working example中看到演示。

+1

我試圖獲取非對象的屬性錯誤 – 2012-07-05 19:04:17

+1

@ToddMoses:不,請參閱此處的工作示例:http://codepad.org/kGxUNabC – Blaster 2012-07-05 19:04:41

0

你的輸入是無效的,假設:

$this = '"{\"success\":true,\"isavailable\":true}"'; 

是你真的有。

所以它不是一個真正的json_decode問題,而是斜線和尾部引號。

您可以通過更換或修剪,如上所述修復它。

$obj = json_decode(trim(stripslashes('"{\"success\":true,\"isavailable\":true}\"'), '"')); 

接取它只是做:

$obj->success 

$obj->isavailable 

您將獲得1作爲真正的是一個布爾值。

但個人而言,您應該考慮逃避響應,以避免JSON字符串的這些'黑客'。事物如同斜槓和引號,不應該發送未經轉義。

如果這是您自己的JSON響應當然。

相關問題