Вчера я потратил 2 часа на проверку и исправление этой ошибки, наконец, я обнаружил, что в строке JSON, которую я хотел декодировать, были косые черты '\'. Таким образом, логическая вещь, которую нужно сделать, это использовать функцию Stripslashes или что-то похожее на разные PL.
Конечно, лучше всего распечатать эту переменную и посмотреть, чем она станет после json_decode. Если она нулевая, вы также можете использовать функцию json_last_error () , чтобы определить ошибку, которая вернет целое число, Вот те, которые описаны INT:
0 = JSON_ERROR_NONE
1 = JSON_ERROR_DEPTH
2 = JSON_ERROR_STATE_MISMATCH
3 = JSON_ERROR_CTRL_CHAR
4 = JSON_ERROR_SYNTAX
5 = JSON_ERROR_UTF8
В моем случае я получил вывод json_last_error () как число 4 , так что JSON_ERROR_SYNTAX . Затем я пошел и посмотрел на строку, которую я сам хотел преобразовать, и она была в последней строке:
'\'title\' error ...'
После этого действительно просто исправить.
$json = json_decode(stripslashes($response));
if (json_last_error() == 0) { // you've got an object in $json}