2010-02-23 6 views
14

При использовании РНР json_decode(), я не вижу способа различать значение NULL возврата, указывающий неудачу в декодировании и декодируется правильно NULL значение:Обнаружения json_decode() сбой в PHP

var_dump(json_decode('nonsense')); // returns NULL 
var_dump(json_decode(json_encode(NULL))); // also returns NULL 

И случай один не вызывает исключения. Поэтому я не уверен, как тестировать сбой декодирования.

Идеи?

+0

FYI, технически, документ JSON не может содержать только нулевое значение, поэтому не должно быть ничего, чтобы отличить их. PHP достаточно хорош, чтобы расширить JSON, чтобы включить массивы и скаляры, такие как строки, номера и нуль, но они недействительны на верхнем уровне в документе JSON. –

ответ

29

Для любых ошибок анализа JSON вам необходимо будет проверить json_last_error.

json_decode($string); 
switch(json_last_error()) { 
    case JSON_ERROR_DEPTH: 
     echo ' - Maximum stack depth exceeded'; 
    break; 
    case JSON_ERROR_CTRL_CHAR: 
     echo ' - Unexpected control character found'; 
    break; 
    case JSON_ERROR_SYNTAX: 
     echo ' - Syntax error, malformed JSON'; 
    break; 
    case JSON_ERROR_NONE: 
     echo ' - No errors'; 
    break; 
} 
+0

Это новое в php 5.3 объясняет, почему я не знал об этом. Спасибо, что указали это. Сегодня я загружу свежую документацию. – 2010-02-23 21:39:18

+0

Не проблема, рад, что я мог бы помочь. –