Содержание
- json_decode возвращает JSON_ERROR_SYNTAX, но он-лайн форматировщик говорит, что JSON в порядке
- Решение
- Другие решения
- Bitrix: JSON error: Syntax error
- json error syntax error 4
- Решение
- Другие решения
- Описание
- Список параметров
- Возвращаемые значения
- Примеры
- Смотрите также
- json_last_error
- Описание
- Список параметров
- Возвращаемые значения
- Примеры
- Смотрите также
- Предопределённые константы
json_decode возвращает JSON_ERROR_SYNTAX, но он-лайн форматировщик говорит, что JSON в порядке
У меня очень странная проблема.
У меня есть веб-сервис 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 »
В начале файла я объявил тег разрыва строки … Так что это была ошибка для меня. Удалив этот тег разрыва строки, я смог […]
Источник
Bitrix: JSON error: Syntax error
При настройке сайта, пункт «Рабочий стол — Маркетинг — Поисковая оптимизация — Поисковые системы — Яндекс» при попытке авторизоваться через Яндекс и вводе полученного от Яндекс кода подтверждения получаю «Не удалось получить авторизацию: JSON error: Syntax error [4]». Причем данная ошибка видна только в Mozilla Firefox, в других браузерах просто не происходит авторизации. Битрикс установлен в виртуальной машине от разработчика (Bitrix virtual appliance version 7.4.3).
Обратился в ТП битрикса, неделю переписывался, попросили доступы не только в админку сайта но и доступы к аккаунту Яндекса (зачем?). После недельной переписки с ТП выяснилось, что есть проблема с подключением к сайту именно Яндекса.
Проверить проблему подключения к «oauth.yandex.ru» можно кодом:
$res = stream_socket_client(«ssl://oauth.yandex.ru:443», $errno, $errstr, 5);
var_dump($res);
И проблема была из-за того, что виртуалка была создана на CentOS 6.10, в которой для корректной работы с сервисами Яндекса необходимо принудительно обновить CA.
Делается следующим образом:
На всякий случай скопировали текущие CA (могут быть по другому пути):
cp /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem tls-ca-bundle.pem
Скачали новые и обновили CA.
curl https://www.certum.pl/CA.pem > /etc/pki/ca-trust/source/anchors/certum_pl_CA.pem
update-ca-trust extract
После этого вышеприведенный код перестал выдавать ошибку при подключении к сайту Яндекса.
Источник
json error syntax error 4
У меня очень странная проблема.
У меня есть веб-сервис 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
Константа | Значение | Доступность |
---|---|---|
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 [] = « » ;
foreach ( $json as $string )
Результат выполнения данного примера:
Пример #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.
Источник
json_last_error
(PHP 5 >= 5.3.0, PHP 7, PHP
json_last_error — Возвращает последнюю ошибку
Описание
Возвращает последнюю ошибку (если она есть), произошедшую во время последнего кодирования/декодирования JSON если при вызове не использовался флаг JSON_THROW_ON_ERROR .
Список параметров
У этой функции нет параметров.
Возвращаемые значения
Возвращает целочисленное значение, которое может быть одной из следующих констант:
Коды ошибок JSON
Константа | Значение | Доступность |
---|---|---|
JSON_ERROR_NONE | Ошибок нет | |
JSON_ERROR_DEPTH | Достигнута максимальная глубина стека | |
JSON_ERROR_STATE_MISMATCH | Неверный или некорректный JSON | |
JSON_ERROR_CTRL_CHAR | Ошибка управляющего символа, возможно неверная кодировка | |
JSON_ERROR_SYNTAX | Синтаксическая ошибка | |
JSON_ERROR_UTF8 | Некорректные символы UTF-8, возможно неверная кодировка | |
JSON_ERROR_RECURSION | Одна или несколько зацикленных ссылок в кодируемом значении | |
JSON_ERROR_INF_OR_NAN | Одно или несколько значений NAN или INF в кодируемом значении | |
JSON_ERROR_UNSUPPORTED_TYPE | Передано значение с неподдерживаемым типом | |
JSON_ERROR_INVALID_PROPERTY_NAME | Имя свойства не может быть закодировано | |
JSON_ERROR_UTF16 | Некорректный символ UTF-16, возможно некорректно закодирован |
Примеры
Пример #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-представление данных
Источник
Предопределённые константы
Перечисленные ниже константы определены данным модулем и могут быть доступны только в том случае, если PHP был собран с поддержкой этого модуля или же в том случае, если данный модуль был динамически загружен во время выполнения.
Следующие константы указывают на тип ошибки, возвращённой функцией json_last_error() или хранящейся, как code в JsonException .
JSON_ERROR_NONE ( int ) Не произошло никаких ошибок. JSON_ERROR_DEPTH ( int ) Была превышена максимальная глубина стека. JSON_ERROR_STATE_MISMATCH ( int ) Неверный или повреждённый JSON. JSON_ERROR_CTRL_CHAR ( int ) Ошибка управляющих символов, вероятно, из-за неверного кодирования. JSON_ERROR_SYNTAX ( int ) Синтаксическая ошибка. JSON_ERROR_UTF8 ( int ) Повреждённые символы UTF-8, вероятно, из-за неверного кодирования. JSON_ERROR_RECURSION ( int ) Объект или массив, переданный в функцию json_encode() включает рекурсивные ссылки и не может быть закодирован. Если была передана опция JSON_PARTIAL_OUTPUT_ON_ERROR , то на месте рекурсивных ссылок будет выведен null . JSON_ERROR_INF_OR_NAN ( int ) Значение, переданное в функцию json_encode() , включает либо NAN , либо INF . Если была указана константа JSON_PARTIAL_OUTPUT_ON_ERROR , то вместо указанных особых значений будет выведен 0 . JSON_ERROR_UNSUPPORTED_TYPE ( int ) В функцию json_encode() было передано значение неподдерживаемого типа, например, resource. Если была указана константа JSON_PARTIAL_OUTPUT_ON_ERROR , то вместо неподдерживаемого значения будет выводиться null . JSON_ERROR_INVALID_PROPERTY_NAME ( int ) В строке переданной в json_decode() был ключ, начинающийся с символа u0000. JSON_ERROR_UTF16 ( int ) Один непарный суррогат UTF-16 в экранированной последовательности Unicode в строке JSON, переданной в json_decode() .
Можно комбинировать следующие константы для передачи в json_decode() .
JSON_BIGINT_AS_STRING ( int ) Декодирует большие целые числа в качестве исходного значения строки. JSON_OBJECT_AS_ARRAY ( int ) Преобразует объекты JSON в массив PHP. Эта опция может быть задана автоматически, если вызвать json_decode() указав вторым параметром true .
Следующие константы можно комбинировать для использования в json_encode() .
JSON_HEX_TAG ( int ) Все кодируются в u003C и u003E. JSON_HEX_AMP ( int ) Все & кодируются в u0026. JSON_HEX_APOS ( int ) Все символы ‘ кодируются в u0027. JSON_HEX_QUOT ( int ) Все символы » кодируются в u0022. JSON_FORCE_OBJECT ( int ) Выдавать объект вместо массива при использовании неассоциативного массива. Это полезно, когда принимающая программа или код ожидают объект, а массив пуст. JSON_NUMERIC_CHECK ( int ) Кодирование строк, содержащих числа, как числа. JSON_PRETTY_PRINT ( int ) Использовать пробельные символы в возвращаемых данных для их форматирования. JSON_UNESCAPED_SLASHES ( int ) Не экранировать / . JSON_UNESCAPED_UNICODE ( int ) Не кодировать многобайтовые символы Unicode (по умолчанию они кодируются как uXXXX). JSON_PARTIAL_OUTPUT_ON_ERROR ( int ) Позволяет избежать возникновения ошибок при использовании функции json_encode. Осуществляет подстановку значений по умолчанию вместо некодируемых. JSON_PRESERVE_ZERO_FRACTION ( int ) Гарантирует, что значение типа float будет преобразовано именно в значение типа float в случае, если дробная часть равна 0. JSON_UNESCAPED_LINE_TERMINATORS ( int ) Символы конца строки не будут экранироваться, если задана константа JSON_UNESCAPED_UNICODE . Поведение будет таким же, какое оно было до PHP 7.1 без этой константы. Доступно с PHP 7.1.0.
Следующие константы можно комбинировать для использования в json_decode() и json_encode() .
JSON_INVALID_UTF8_IGNORE ( int ) Игнорировать некорректные символы UTF-8. Доступно с PHP 7.2.0. JSON_INVALID_UTF8_SUBSTITUTE ( int ) Преобразовывать некорректные символы UTF-8 в xfffd (Символ Юникода ‘REPLACEMENT CHARACTER’) Доступно с PHP 7.2.0. JSON_THROW_ON_ERROR ( int ) Выбрасывается исключение JsonException в случае возникновения ошибок вместо установки глобального состояния ошибки, которое может быть получено с помощью функции json_last_error() и json_last_error_msg() . Константа JSON_PARTIAL_OUTPUT_ON_ERROR имеет приоритет над JSON_THROW_ON_ERROR . Доступно с PHP 7.3.0.
Источник
(PHP 5 >= 5.3.0, PHP 7, PHP
json_last_error — Returns the last error occurred
Description
json_last_error(): int
Parameters
This function has no parameters.
Return Values
Returns an integer, the value can be one of the following
constants:
Constant | Meaning | Availability |
---|---|---|
JSON_ERROR_NONE |
No error has occurred | |
JSON_ERROR_DEPTH |
The maximum stack depth has been exceeded | |
JSON_ERROR_STATE_MISMATCH |
Invalid or malformed JSON | |
JSON_ERROR_CTRL_CHAR |
Control character error, possibly incorrectly encoded | |
JSON_ERROR_SYNTAX |
Syntax error | |
JSON_ERROR_UTF8 |
Malformed UTF-8 characters, possibly incorrectly encoded | |
JSON_ERROR_RECURSION |
One or more recursive references in the value to be encoded | |
JSON_ERROR_INF_OR_NAN |
One or moreNAN or INF values in the value to be encoded |
|
JSON_ERROR_UNSUPPORTED_TYPE |
A value of a type that cannot be encoded was given | |
JSON_ERROR_INVALID_PROPERTY_NAME |
A property name that cannot be encoded was given | |
JSON_ERROR_UTF16 |
Malformed UTF-16 characters, possibly incorrectly encoded |
Examples
Example #1 json_last_error() example
<?php
// A valid json string
$json[] = '{"Organization": "PHP Documentation Team"}';// An invalid json string which will cause an syntax
// error, in this case we used ' instead of " for quotation
$json[] = "{'Organization': 'PHP Documentation Team'}";
foreach (
$json as $string) {
echo 'Decoding: ' . $string;
json_decode($string);
switch (
json_last_error()) {
case JSON_ERROR_NONE:
echo ' - No errors';
break;
case JSON_ERROR_DEPTH:
echo ' - Maximum stack depth exceeded';
break;
case JSON_ERROR_STATE_MISMATCH:
echo ' - Underflow or the modes mismatch';
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_UTF8:
echo ' - Malformed UTF-8 characters, possibly incorrectly encoded';
break;
default:
echo ' - Unknown error';
break;
}
echo
PHP_EOL;
}
?>
The above example will output:
Decoding: {"Organization": "PHP Documentation Team"} - No errors Decoding: {'Organization': 'PHP Documentation Team'} - Syntax error, malformed JSON
Example #2 json_last_error() with json_encode()
<?php
// An invalid UTF8 sequence
$text = "xB1x31";$json = json_encode($text);
$error = json_last_error();var_dump($json, $error === JSON_ERROR_UTF8);
?>
The above example will output:
string(4) "null" bool(true)
Example #3 json_last_error() and JSON_THROW_ON_ERROR
<?php
// An invalid UTF8 sequence which causes JSON_ERROR_UTF8
json_encode("xB1x31");// The following does not cause a JSON error
json_encode('okay', JSON_THROW_ON_ERROR);// The global error state has not been changed by the former json_encode()
var_dump(json_last_error() === JSON_ERROR_UTF8);
?>
The above example will output:
See Also
- json_last_error_msg() — Returns the error string of the last json_encode() or json_decode() call
- json_decode() — Decodes a JSON string
- json_encode() — Returns the JSON representation of a value
jimmetry at gmail dot com ¶
11 years ago
While this can obviously change between versions, the current error codes are as follows:
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
I'm only posting these for people who may be trying to understand why specific JSON files are not being decoded. Please do not hard-code these numbers into an error handler routine.
praveenscience at gmail dot com ¶
8 years ago
I used this simple script, flicked from StackOverflow to escape from the function failing:
<?php
function utf8ize($d) {
if (is_array($d)) {
foreach ($d as $k => $v) {
$d[$k] = utf8ize($v);
}
} else if (is_string ($d)) {
return utf8_encode($d);
}
return $d;
}
?>
Cheers,
Praveen Kumar!
msxcms at bmforum dot com ¶
5 years ago
use this code with mb_convert_encoding, you can json_encode some corrupt UTF-8 chars
function safe_json_encode($value, $options = 0, $depth = 512) {
$encoded = json_encode($value, $options, $depth);
if ($encoded === false && $value && json_last_error() == JSON_ERROR_UTF8) {
$encoded = json_encode(utf8ize($value), $options, $depth);
}
return $encoded;
}
function utf8ize($mixed) {
if (is_array($mixed)) {
foreach ($mixed as $key => $value) {
$mixed[$key] = utf8ize($value);
}
} elseif (is_string($mixed)) {
return mb_convert_encoding($mixed, "UTF-8", "UTF-8");
}
return $mixed;
}
hemono at gmail dot com ¶
7 years ago
when json_decode a empty string, PHP7 will trigger an Syntax error:
<?php
json_decode("");
var_dump(json_last_error(), json_last_error_msg());// PHP 7
int(4)
string(12) "Syntax error"// PHP 5
int(0)
string(8) "No error"
George Dimitriadis ¶
6 years ago
Just adding this note since I had to code this for the actual values reference.
<?phpecho JSON_ERROR_NONE . ' JSON_ERROR_NONE' . '<br />';
echo JSON_ERROR_DEPTH . ' JSON_ERROR_DEPTH' . '<br />';
echo JSON_ERROR_STATE_MISMATCH . ' JSON_ERROR_STATE_MISMATCH' . '<br />';
echo JSON_ERROR_CTRL_CHAR . ' JSON_ERROR_CTRL_CHAR' . '<br />';
echo JSON_ERROR_SYNTAX . ' JSON_ERROR_SYNTAX' . '<br />';
echo JSON_ERROR_UTF8 . ' JSON_ERROR_UTF8' . '<br />';
echo JSON_ERROR_RECURSION . ' JSON_ERROR_RECURSION' . '<br />';
echo JSON_ERROR_INF_OR_NAN . ' JSON_ERROR_INF_OR_NAN' . '<br />';
echo JSON_ERROR_UNSUPPORTED_TYPE . ' JSON_ERROR_UNSUPPORTED_TYPE' . '<br />';/*
The above outputs :
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
6 JSON_ERROR_RECURSION
7 JSON_ERROR_INF_OR_NAN
8 JSON_ERROR_UNSUPPORTED_TYPE
*/?>
wedge at atlanteans dot net ¶
4 years ago
here is a small updated version of utf8ize that has the following addition :
* It uses iconv instead of utf8_encode for potentially better result.
* It adds the support of objects variable
* It also update array key value (in a case I met I had to utf8ize the key as well as those were generated from a user input value)
Here is the code.
<?php
function utf8ize($d) {
if (is_array($d)) {
foreach ($d as $k => $v) {
unset($d[$k]);
$d[utf8ize($k)] = utf8ize($v);
}
} else if (is_object($d)) {
$objVars = get_object_vars($d);
foreach($objVars as $key => $value) {
$d->$key = utf8ize($value);
}
} else if (is_string ($d)) {
return iconv('UTF-8', 'UTF-8//IGNORE', utf8_encode($d));
}
return $d;
}
?>
williamprogphp at yahoo dot com dot br ¶
9 years ago
This is a quite simple and functional trick to validate JSON's strings.
<?phpfunction json_validate($string) {
if (is_string($string)) {
@json_decode($string);
return (json_last_error() === JSON_ERROR_NONE);
}
return false;
}
echo (json_validate('{"test": "valid JSON"}') ? "It's a JSON" : "NOT is a JSON"); // prints 'It's a JSON'
echo (json_validate('{test: valid JSON}') ? "It's a JSON" : "NOT is a JSON"); // prints 'NOT is a JSON' due to missing quotes
echo (json_validate(array()) ? "It's a JSON" : "NOT is a JSON"); // prints 'NOT is a JSON' due to a non-string argument
?>
Cheers
json_decode возвращает JSON_ERROR_SYNTAX, но он-лайн форматировщик говорит, что JSON в порядке
У меня очень странная проблема.
У меня есть веб-сервис 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 »
В начале файла я объявил тег разрыва строки … Так что это была ошибка для меня. Удалив этот тег разрыва строки, я смог […]
Источник
Bitrix: JSON error: Syntax error
При настройке сайта, пункт «Рабочий стол — Маркетинг — Поисковая оптимизация — Поисковые системы — Яндекс» при попытке авторизоваться через Яндекс и вводе полученного от Яндекс кода подтверждения получаю «Не удалось получить авторизацию: JSON error: Syntax error [4]». Причем данная ошибка видна только в Mozilla Firefox, в других браузерах просто не происходит авторизации. Битрикс установлен в виртуальной машине от разработчика (Bitrix virtual appliance version 7.4.3).
Обратился в ТП битрикса, неделю переписывался, попросили доступы не только в админку сайта но и доступы к аккаунту Яндекса (зачем?). После недельной переписки с ТП выяснилось, что есть проблема с подключением к сайту именно Яндекса.
Проверить проблему подключения к «oauth.yandex.ru» можно кодом:
$res = stream_socket_client(«ssl://oauth.yandex.ru:443», $errno, $errstr, 5);
var_dump($res);
И проблема была из-за того, что виртуалка была создана на CentOS 6.10, в которой для корректной работы с сервисами Яндекса необходимо принудительно обновить CA.
Делается следующим образом:
На всякий случай скопировали текущие CA (могут быть по другому пути):
cp /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem tls-ca-bundle.pem
Скачали новые и обновили CA.
curl https://www.certum.pl/CA.pem > /etc/pki/ca-trust/source/anchors/certum_pl_CA.pem
update-ca-trust extract
После этого вышеприведенный код перестал выдавать ошибку при подключении к сайту Яндекса.
Источник
json error syntax error 4
У меня очень странная проблема.
У меня есть веб-сервис 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
Константа | Значение | Доступность |
---|---|---|
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 [] = « » ;
foreach ( $json as $string )
Результат выполнения данного примера:
Пример #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.
Источник
json_last_error
(PHP 5 >= 5.3.0, PHP 7, PHP
json_last_error — Возвращает последнюю ошибку
Описание
Возвращает последнюю ошибку (если она есть), произошедшую во время последнего кодирования/декодирования JSON если при вызове не использовался флаг JSON_THROW_ON_ERROR .
Список параметров
У этой функции нет параметров.
Возвращаемые значения
Возвращает целочисленное значение, которое может быть одной из следующих констант:
Коды ошибок JSON
Константа | Значение | Доступность |
---|---|---|
JSON_ERROR_NONE | Ошибок нет | |
JSON_ERROR_DEPTH | Достигнута максимальная глубина стека | |
JSON_ERROR_STATE_MISMATCH | Неверный или некорректный JSON | |
JSON_ERROR_CTRL_CHAR | Ошибка управляющего символа, возможно неверная кодировка | |
JSON_ERROR_SYNTAX | Синтаксическая ошибка | |
JSON_ERROR_UTF8 | Некорректные символы UTF-8, возможно неверная кодировка | |
JSON_ERROR_RECURSION | Одна или несколько зацикленных ссылок в кодируемом значении | |
JSON_ERROR_INF_OR_NAN | Одно или несколько значений NAN или INF в кодируемом значении | |
JSON_ERROR_UNSUPPORTED_TYPE | Передано значение с неподдерживаемым типом | |
JSON_ERROR_INVALID_PROPERTY_NAME | Имя свойства не может быть закодировано | |
JSON_ERROR_UTF16 | Некорректный символ UTF-16, возможно некорректно закодирован |
Примеры
Пример #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-представление данных
Источник
json_decode возвращает JSON_ERROR_SYNTAX, но он-лайн форматировщик говорит, что JSON в порядке
У меня возникла очень странная проблема.
У меня есть веб-сервис JSON.
Но когда я загружаю свой JSON с помощью этого кода:
Я получил ошибку: SYNTAX ERROR
КОТОРЫЙ НЕ ПОМОГАЕТ ПОЛНОМ ВСЕМ.
Я вижу, что с помощью PHP 5.5 я мог бы использовать эту функцию: http://php.net/manual/en/function.json-last-error-msg.php
(но мне еще не удалось установить PHP 5.5, и я не уверен, что эта функция даст мне больше деталей)
7 ответов
Я столкнулся с той же проблемой, на самом деле есть невидимые скрытые символы, и вам нужно удалить их. Вот глобальный код, который работает во многих случаях:
Удаление спецификации (отметка байтового байта) часто — это необходимое вам решение:
У вас нет спецификации, но если она там, она невидима, поэтому вы ее не увидите!!
используйте BOM Cleaner, если у вас есть много файлов для исправления.
Я решил эту проблему добавить stripslashes в строку, перед json_decode.
Чтобы собрать все вещи здесь и там, я подготовил JSON-обертку с автоматическими корректирующими действиями декодирования.
Вы не показываете свой JSON, но это звучит так, как будто это может быть недопустимая последовательность UTF-8 в аргументе, большинство онлайн-валидаторов не поймают ее. убедитесь, что ваши данные UTF-8, а также проверьте наличие у вас иностранных символов. Вам не нужен PHP5, чтобы увидеть вашу ошибку, используйте error_log() для регистрации проблем.
Источник