2013-10-30 21 views
0

我有json解析的問題。 我已經在這裏閱讀了很多關於stackoverflow的問題,但我無法弄清楚我錯過了什麼。json從字符串到數組使用php

在我的網站中,我使用Facebook Api使用curl發佈我的feed,並用json消息響應。 我採取了這個迴應,並將其保存在我的數據庫中。
在我的後臺中,我需要檢索此消息並在發生錯誤時進行打印。

這裏有關錯誤消息的一個例子:

{"error":{"message":"(#1500) The url you supplied is invalid","type":"OAuthException","code":1500}} 

在我的PHP頁面,我需要得到公正的message一部分,所以我所做的:

$message = get from the db and fetch; 
$error_array = json_decode($message,true); 
print_r($error_array); 

,但它不顯示任何信息,只是一個空白頁面。
如果我只是打印$message我可以看到整個字符串。

我錯過了什麼? 這個問題整天都讓我瘋狂!

+0

如果您正在使用PHP版本<5.2 –

+0

問題是從數據庫中檢索數據時數據的編碼錯誤。 – Latheesan

+0

,您沒有爲您的PHP安裝啓用「JSON」功能 –

回答

2

我試過如下:

<pre> 
<?php 

$jsonStr = '{"error":{"message":"(#1500) The url you supplied is invalid","type":"OAuthException","code":1500}}'; 

$error_array = json_decode($jsonStr, true); 

print_r($error_array); 

?> 

,並獲得輸出:

Array 
(
    [error] => Array 
     (
      [message] => (#1500) The url you supplied is invalid 
      [type] => OAuthException 
      [code] => 1500 
     ) 
) 

它的工作如預期。

我懷疑,問題是這樣的:

$message = get from the db and fetch;

你後裝入$message變量,做一個var_dump($message),看看字符串在那裏(如預期)。

+0

這是答案。你提供的JSON字符串是完全有效的。所以你的代碼不起作用的唯一原因是你從你的數據庫中得到錯誤的輸出。可能是因爲html實體編碼或其他類似的東西 –

+0

,如果他的PHP中沒有'json_encode'或'json_decode'功能,他會得到一個'function not exist'錯誤 - 這個錯誤會顯示在頁面上(如果display_error打開)或記錄到文件(如果啓用了error_log)。 – Latheesan

+0

感謝Latheesan Kanes問題是編碼字符串,當我從數據庫中檢索數據時,我得到了解析的雙引號,因此導致了錯誤。 再次感謝 –