У меня очень странная проблема.
У меня есть веб-сервис JSON.
Но когда я загружаю свой JSON с этим кодом:
Я получил ошибку: SYNTAX ERROR
ЧТО НЕ ПОМОГАЕТ ПОЛНОЙ ВСЕ.
(но мне пока не удалось установить PHP 5.5, и я не уверен, что эта функция даст мне больше деталей)
Решение
Я столкнулся с той же проблемой, на самом деле есть некоторые скрытые символы, невидимые, и вам нужно удалить его.
Вот глобальный код, который работает во многих случаях:
Другие решения
Удаление BOM (Byte Order Mark) часто является решением, которое вам нужно:
У вас не должно быть спецификации, но если она есть, она невидима, поэтому вы ее не увидите !!
использование BOM Cleaner если у вас есть много файлов, чтобы исправить.
Я решил эту проблему, добавив stripslashes в строку, перед json_decode.
Чтобы собрать все вместе, я подготовил JSON-оболочку с расшифровкой автокорректирующих действий. Самую последнюю версию можно найти в моем GitHub Gist .
Вы не показывали свой JSON, но это похоже на то, что это может быть неверная последовательность UTF-8 в аргументе, большинство онлайн-валидаторов не поймают его.
убедитесь, что ваши данные UTF-8, а также проверьте, есть ли у вас иностранные символы.
Вам не нужен PHP5, чтобы увидеть вашу ошибку, используйте журнал ошибок() регистрировать проблемы.
Попробовав все решение без результата, это сработало для меня.
Надеюсь, это поможет кому-то
У меня была такая же проблема. Для меня это было вызвано echo »
В начале файла я объявил тег разрыва строки … Так что это была ошибка для меня. Удалив этот тег разрыва строки, я смог […]
(PHP 5 >= 5.3.0, PHP 7)
json_last_error — Возвращает последнюю ошибку
Описание
Возвращает последнюю ошибку (если она есть), произошедшую во время последнего кодирования/декодирования JSON если при вызове не использовался флаг JSON_THROW_ON_ERROR .
Список параметров
У этой функции нет параметров.
Возвращаемые значения
Возвращает целочисленное значение, которое может быть одной из следующих констант:
| Константа | Значение | Доступность |
|---|---|---|
| JSON_ERROR_NONE | Ошибок нет | |
| JSON_ERROR_DEPTH | Достигнута максимальная глубина стека | |
| JSON_ERROR_STATE_MISMATCH | Неверный или некорректный JSON | |
| JSON_ERROR_CTRL_CHAR | Ошибка управляющего символа, возможно неверная кодировка | |
| JSON_ERROR_SYNTAX | Синтаксическая ошибка | |
| JSON_ERROR_UTF8 | Некорректные символы UTF-8, возможно неверная кодировка | PHP 5.3.3 |
| JSON_ERROR_RECURSION | Одна или несколько зацикленных ссылок в кодируемом значении | PHP 5.5.0 |
| JSON_ERROR_INF_OR_NAN | Одно или несколько значений NAN или INF в кодируемом значении | PHP 5.5.0 |
| JSON_ERROR_UNSUPPORTED_TYPE | Передано значение с неподдерживаемым типом | PHP 5.5.0 |
| JSON_ERROR_INVALID_PROPERTY_NAME | Имя свойства не может быть закодировано | PHP 7.0.0 |
| JSON_ERROR_UTF16 | Некорректный символ UTF-16, возможно некорректно закодирован | PHP 7.0.0 |
Примеры
Пример #1 Пример использования json_last_error()
// Неверная json-строка, которая вызовет синтаксическую ошибку,
// здесь в качестве кавычек мы используем ‘ вместо »
$json [] = «<'Organization': 'PHP Documentation Team'>» ;
foreach ( $json as $string ) <
echo ‘Декодируем: ‘ . $string ;
json_decode ( $string );
switch ( json_last_error ()) <
case JSON_ERROR_NONE :
echo ‘ — Ошибок нет’ ;
break;
case JSON_ERROR_DEPTH :
echo ‘ — Достигнута максимальная глубина стека’ ;
break;
case JSON_ERROR_STATE_MISMATCH :
echo ‘ — Некорректные разряды или несоответствие режимов’ ;
break;
case JSON_ERROR_CTRL_CHAR :
echo ‘ — Некорректный управляющий символ’ ;
break;
case JSON_ERROR_SYNTAX :
echo ‘ — Синтаксическая ошибка, некорректный JSON’ ;
break;
case JSON_ERROR_UTF8 :
echo ‘ — Некорректные символы UTF-8, возможно неверно закодирован’ ;
break;
default:
echo ‘ — Неизвестная ошибка’ ;
break;
>
Результат выполнения данного примера:
Пример #2 Совместное использование json_last_error() и json_encode()
// Некорректная последовательность UTF8
$text = «xB1x31» ;
$json = json_encode ( $text );
$error = json_last_error ();
var_dump ( $json , $error === JSON_ERROR_UTF8 );
?>
Результат выполнения данного примера:
Пример #3 json_last_error() и JSON_THROW_ON_ERROR
// Некорректная последовательность UTF8, вызывающая JSON_ERROR_UTF8
json_encode ( «xB1x31» );
// Не вызовет ошибки JSON
json_encode ( ‘okay’ , JSON_THROW_ON_ERROR );
// Глобальное состояние не будет изменено json_encode()
var_dump ( json_last_error () === JSON_ERROR_UTF8 );
?>
Результат выполнения данного примера:
Смотрите также
- json_last_error_msg() — Возвращает строку с сообщением об ошибке последнего вызова json_encode() или json_decode()
- json_decode() — Декодирует строку JSON
- json_encode() — Возвращает JSON-представление данных
I had previously asked the same question. I would like to decode the json from: http://pad.skyozora.com/data/pets.json. Below is the code I used previously:
From the last answer I know there is UTF8 DOM in the json return. I tried the answer from a similar question: json_decode returns NULL after webservice call, but all of the answers not work for me.
And after do more research I found a way that works:
This successfully decode the json into array. However all Chinese and Japanese character string were removed too. Any ideas?
Edited:
and give me the error:
But I couldn’t see any problem with this part of json.