Json error битрикс

json_decode возвращает JSON_ERROR_SYNTAX, но он-лайн форматировщик говорит, что JSON в порядке У меня очень странная проблема. У меня есть веб-сервис JSON. Но когда я загружаю свой JSON с этим кодом: Я получил ошибку: SYNTAX ERROR ЧТО НЕ ПОМОГАЕТ ПОЛНОЙ ВСЕ. (но мне пока не удалось установить PHP 5.5, и я не уверен, что эта […]

Содержание

  1. json_decode возвращает JSON_ERROR_SYNTAX, но он-лайн форматировщик говорит, что JSON в порядке
  2. Решение
  3. Другие решения
  4. Bitrix: JSON error: Syntax error
  5. json error syntax error 4
  6. Решение
  7. Другие решения
  8. Описание
  9. Список параметров
  10. Возвращаемые значения
  11. Примеры
  12. Смотрите также
  13. json_last_error
  14. Описание
  15. Список параметров
  16. Возвращаемые значения
  17. Примеры
  18. Смотрите также
  19. Предопределённые константы

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 8)

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.

Источник

Не открываются пользовательские группы после обновления (проблема с кодировкой)

 

Пользователь 4606427

Заглянувший

Сообщений: 3
Регистрация: 18.09.2020

#1

22.06.2022 21:45:46

После последних обновлений портала (коробка), не отображаются содержимое пользовательских групп.
Какие могут быть способы решения?

При открытии любой группы (даже созданную только что) получаю такое:

Часть лога /var/log/php/exceptions.log

Код
2022-06-22 21:04:11 - Host: <имя хоста>:443 - UNCAUGHT_EXCEPTION - [BitrixMainArgumentException] 
JSON error: Malformed UTF-8 characters, possibly incorrectly encoded [5] (100)
/home/bitrix/www/bitrix/modules/main/lib/web/json.php:160
#0: BitrixMainWebJson::throwException(string)
   /home/bitrix/www/bitrix/modules/main/lib/web/json.php:147
#1: BitrixMainWebJson::checkException(integer)
   /home/bitrix/www/bitrix/modules/main/lib/web/json.php:37
#2: BitrixMainWebJson::encode(array)
   /home/bitrix/www/bitrix/components/bitrix/main.interface.buttons/templates/.default/template.php:89
#3: include(string)
   /home/bitrix/www/bitrix/modules/main/classes/general/component_template.php:790
#4: CBitrixComponentTemplate->__IncludePHPTemplate(array, array, string)
   /home/bitrix/www/bitrix/modules/main/classes/general/component_template.php:885
#5: CBitrixComponentTemplate->IncludeTemplate(array)
   /home/bitrix/www/bitrix/modules/main/classes/general/component.php:775
#6: CBitrixComponent->showComponentTemplate()
   /home/bitrix/www/bitrix/modules/main/classes/general/component.php:716
#7: CBitrixComponent->includeComponentTemplate()
   /home/bitrix/www/bitrix/components/bitrix/main.interface.buttons/class.php:789
#8: CMainInterfaceButtons->executeComponent()
   /home/bitrix/www/bitrix/modules/main/classes/general/component.php:660
#9: CBitrixComponent->includeComponent(string, array, NULL, boolean)
   /home/bitrix/www/bitrix/modules/main/classes/general/main.php:1072
#10: CAllMain->IncludeComponent(string, string, array)
   /home/bitrix/www/bitrix/templates/bitrix24/components/bitrix/socialnetwork.group_menu/.default/template.php:451
#11: include(string)
   /home/bitrix/www/bitrix/modules/main/classes/general/component_template.php:790
#12: CBitrixComponentTemplate->__IncludePHPTemplate(array, array, string)
   /home/bitrix/www/bitrix/modules/main/classes/general/component_template.php:885
#13: CBitrixComponentTemplate->IncludeTemplate(array)
   /home/bitrix/www/bitrix/modules/main/classes/general/component.php:775
#14: CBitrixComponent->showComponentTemplate()
   /home/bitrix/www/bitrix/modules/main/classes/general/component.php:716
#15: CBitrixComponent->includeComponentTemplate()
   /home/bitrix/www/bitrix/components/bitrix/socialnetwork.group_menu/component.php:354
#16: include(string)
   /home/bitrix/www/bitrix/modules/main/classes/general/component.php:607
#17: CBitrixComponent->__includeComponent()
   /home/bitrix/www/bitrix/modules/main/classes/general/component.php:684
#18: CBitrixComponent->includeComponent(string, array, object, boolean)
   /home/bitrix/www/bitrix/modules/main/classes/general/main.php:1072
#19: CAllMain->IncludeComponent(string, string, array, object, array)
   /home/bitrix/www/bitrix/components/bitrix/socialnetwork_group/templates/.default/util_group_menu.php:52
#20: include(string)
   /home/bitrix/www/bitrix/components/bitrix/socialnetwork_group/templates/.default/group.php:99
#21: include(string)
   /home/bitrix/www/bitrix/modules/main/classes/general/component_template.php:790
#22: CBitrixComponentTemplate->__IncludePHPTemplate(array, array, string)
   /home/bitrix/www/bitrix/modules/main/classes/general/component_template.php:885
#23: CBitrixComponentTemplate->IncludeTemplate(array)
   /home/bitrix/www/bitrix/modules/main/classes/general/component.php:775
#24: CBitrixComponent->showComponentTemplate()
   /home/bitrix/www/bitrix/modules/main/classes/general/component.php:716
#25: CBitrixComponent->includeComponentTemplate(string, string)
   /home/bitrix/www/bitrix/components/bitrix/socialnetwork_group/component.php:1215
#26: include(string)
   /home/bitrix/www/bitrix/modules/main/classes/general/component.php:607
#27: CBitrixComponent->__includeComponent()
   /home/bitrix/www/bitrix/modules/main/classes/general/component.php:684
#28: CBitrixComponent->includeComponent(string, array, NULL, boolean)
   /home/bitrix/www/bitrix/modules/main/classes/general/main.php:1072
#29: CAllMain->IncludeComponent(string, string, array)
   /home/bitrix/www/workgroups/index.php:160
#30: include_once(string)
   /home/bitrix/www/bitrix/modules/main/include/urlrewrite.php:160
#31: include_once(string)
   /home/bitrix/www/bitrix/urlrewrite.php:2
----------
 

Пользователь 5224375

Заглянувший

Сообщений: 3
Регистрация: 29.04.2021

#2

23.06.2022 11:25:40

Та же самая проблема, перестали работать гриппы и проекты, причем если локализацию изменить на [ru] с [ua] все работает:

Код
2022-06-23 11:04:52 - Host: host.ru:443 - UNCAUGHT_EXCEPTION - [BitrixMainArgumentException]
JSON error: Malformed UTF-8 characters, possibly incorrectly encoded [5] (100)
/home/bitrix/www/bitrix/modules/main/lib/web/json.php:160
#0: BitrixMainWebJson::throwException(string)
        /home/bitrix/www/bitrix/modules/main/lib/web/json.php:147
#1: BitrixMainWebJson::checkException(integer)
        /home/bitrix/www/bitrix/modules/main/lib/web/json.php:37
#2: BitrixMainWebJson::encode(array)
        /home/bitrix/www/bitrix/components/bitrix/main.interface.buttons/templates/.default/template.php:89
#3: include(string)
        /home/bitrix/www/bitrix/modules/main/classes/general/component_template.php:790
#4: CBitrixComponentTemplate->__IncludePHPTemplate(array, array, string)
        /home/bitrix/www/bitrix/modules/main/classes/general/component_template.php:885
#5: CBitrixComponentTemplate->IncludeTemplate(array)
        /home/bitrix/www/bitrix/modules/main/classes/general/component.php:775
#6: CBitrixComponent->showComponentTemplate()
        /home/bitrix/www/bitrix/modules/main/classes/general/component.php:716
#7: CBitrixComponent->includeComponentTemplate()
        /home/bitrix/www/bitrix/components/bitrix/main.interface.buttons/class.php:789
#8: CMainInterfaceButtons->executeComponent()
        /home/bitrix/www/bitrix/modules/main/classes/general/component.php:660
#9: CBitrixComponent->includeComponent(string, array, NULL, boolean)
        /home/bitrix/www/bitrix/modules/main/classes/general/main.php:1072
#10: CAllMain->IncludeComponent(string, string, array)
        /home/bitrix/www/bitrix/templates/bitrix24/components/bitrix/socialnetwork.group_menu/.default/template.php:451
#11: include(string)
        /home/bitrix/www/bitrix/modules/main/classes/general/component_template.php:790
#12: CBitrixComponentTemplate->__IncludePHPTemplate(array, array, string)
        /home/bitrix/www/bitrix/modules/main/classes/general/component_template.php:885
#13: CBitrixComponentTemplate->IncludeTemplate(array)
        /home/bitrix/www/bitrix/modules/main/classes/general/component.php:775
#14: CBitrixComponent->showComponentTemplate()
        /home/bitrix/www/bitrix/modules/main/classes/general/component.php:716
#15: CBitrixComponent->includeComponentTemplate()
        /home/bitrix/www/bitrix/components/bitrix/socialnetwork.group_menu/component.php:354
#16: include(string)
        /home/bitrix/www/bitrix/modules/main/classes/general/component.php:607
#17: CBitrixComponent->__includeComponent()
        /home/bitrix/www/bitrix/modules/main/classes/general/component.php:684
#18: CBitrixComponent->includeComponent(string, array, object, boolean)
        /home/bitrix/www/bitrix/modules/main/classes/general/main.php:1072
#19: CAllMain->IncludeComponent(string, string, array, object, array)
        /home/bitrix/www/bitrix/components/bitrix/socialnetwork_group/templates/.default/util_group_menu.php:52
#20: include(string)
        /home/bitrix/www/bitrix/components/bitrix/socialnetwork_group/templates/.default/group.php:99
#21: include(string)
        /home/bitrix/www/bitrix/modules/main/classes/general/component_template.php:790
#22: CBitrixComponentTemplate->__IncludePHPTemplate(array, array, string)
        /home/bitrix/www/bitrix/modules/main/classes/general/component_template.php:885
#23: CBitrixComponentTemplate->IncludeTemplate(array)
        /home/bitrix/www/bitrix/modules/main/classes/general/component.php:775
#24: CBitrixComponent->showComponentTemplate()
        /home/bitrix/www/bitrix/modules/main/classes/general/component.php:716
#25: CBitrixComponent->includeComponentTemplate(string, string)
        /home/bitrix/www/bitrix/components/bitrix/socialnetwork_group/component.php:1215
#26: include(string)
        /home/bitrix/www/bitrix/modules/main/classes/general/component.php:607
#27: CBitrixComponent->__includeComponent()
        /home/bitrix/www/bitrix/modules/main/classes/general/component.php:684
#28: CBitrixComponent->includeComponent(string, array, NULL, boolean)
        /home/bitrix/www/bitrix/modules/main/classes/general/main.php:1072
#29: CAllMain->IncludeComponent(string, string, array)
        /home/bitrix/www/workgroups/index.php:136
#30: include_once(string)
        /home/bitrix/www/bitrix/modules/main/include/urlrewrite.php:160
#31: include_once(string)
        /home/bitrix/www/bitrix/urlrewrite.php:2

———-

 

Пользователь 4490686

Заглянувший

Сообщений: 3
Регистрация: 04.08.2020

#3

05.07.2022 10:29:51

Та же проблема с кодировкой.

Код
1 Object { message: "[Bitrix\Main\ArgumentException] n

JSON error: Malformed UTF-8 characters, possibly incorrectly encoded [5] (100)n

/home/bitrix/www/bitrix/modules/main/lib/web/json.php:160n

#0: Bitrix\Main\Web\Json::throwException(string)n

t/home/bitrix/www/bitrix/modules/main/lib/web/json.php:147n

#1: Bitrix\Main\Web\Json::checkException(integer)n

t/home/bitrix/www/bitrix/modules/main/lib/web/json.php:37n

#2: Bitrix\Main\Web\Json::encode(array, integer)n

t/home/bitrix/www/bitrix/modules/main/lib/engine/respo…main/lib/httpapplication.php:166n

#8: Bitrix\Main\HttpApplication->finalizeControllerResult(object, array, object)n

t/home/bitrix/www/bitrix/modules/main/lib/httpapplication.php:155n

#9: Bitrix\Main\HttpApplication->runController(object, string)n

t/home/bitrix/www/bitrix/modules/main/lib/httpapplication.php:113n

#10: Bitrix\Main\HttpApplication->run()n

t/home/bitrix/www/bitrix/modules/main/services/ajax.php:29n

Как решить? (она появилась после обновления bitrix)

 

Пользователь 4490686

Заглянувший

Сообщений: 3
Регистрация: 04.08.2020

#4

05.07.2022 14:10:04

Проблема с кодировкой . Бывает появляется после обновления сайта.
Чтобы исправить, нужно преобразовать с помощью скрипта в верную кодировку.

https://www.1c-bitrix.ru/download/files/scripts/convert_utf8.php

(если сайт на utf8 был) .
Пример инструкции как делать.

https://dev.1c-bitrix.ru/community/blogs/howto/1466.php

Jasta

980 / 501 / 103

Регистрация: 20.02.2016

Сообщений: 2,852

1

30.09.2021, 17:44. Показов 1906. Ответов 2

Метки нет (Все метки)


Доброго всем времени суток! После обновления Битрикса до версии 21.400.300 при отправке ajax запроса получаю ошибку json_failure. Для отправки запроса используется метод BX.ajax.runComponentAction:

Javascript
1
2
3
4
5
6
7
8
9
10
11
e.preventDefault();
                BX.showWait();
                var form = $(this);
                var data = new FormData(this);
                var htmlContainerSelector = _this.params.htmlContainerSelector;
 
                var request = BX.ajax.runComponentAction('citfact:lk.company_page', 'changeCompanyInfo', {
                    mode: 'class',
                    data: data,
                    signedParameters: _this.params.signedParameters
                });

Подскажите в чём может быть дело?!??



0



Programming

Эксперт

94731 / 64177 / 26122

Регистрация: 12.04.2006

Сообщений: 116,782

30.09.2021, 17:44

2

1823 / 1088 / 221

Регистрация: 16.03.2008

Сообщений: 5,110

Записей в блоге: 2

30.09.2021, 20:46

2

Лучший ответ Сообщение было отмечено Jasta как решение

Решение

Так посмотрите в инструментах разработчика браузера что возвращается на запрос. Наверняка, если в .settings.php включите режим отладки — ошибка какая то выскочит.

Если компонент citfact:lk.company_page на поддержке — может есть смысл обратиться к разработчику. 100% дело в этом компоненте



0



980 / 501 / 103

Регистрация: 20.02.2016

Сообщений: 2,852

01.10.2021, 16:24

 [ТС]

3

Цитата
Сообщение от voral
Посмотреть сообщение

100% дело в этом компоненте

Да Вы были правы. Стал ковырять компонент и оказалось что дауны которые разрабатывали этот сайт до меня, отдавали с бека компонент целиком, чтобы потом перерисовать его через JS, но уже с крохотным сообщением об успехе. Удалил всю эту дичь и переписал по человечески. Спасибо за помощь))



0



Открытые статические члены

static  encode ($data, $options=null)
 
static  decode ($data)
 

Защищенные статические члены

static  serializeJson (&$data)
 
static  convertData ($data)
 
static  unConvertData ($data)
 
static  checkException ($options=0)
 
static  throwException ($e)
 

См. определение в файле json.php строка 10

◆ checkException()

static checkException (   $options = 0 )
staticprotected

Checks global error flag and raises exception if needed.

Аргументы
integer $options Bitmasked options. When JSON_PARTIAL_OUTPUT_ON_ERROR passed no exception is raised.
Возвращает
void
Исключения

См. определение в файле json.php строка 129

130 {

131 $e = json_last_error();

132

133 if ($e == JSON_ERROR_NONE)

134 {

135 return;

136 }

137

138 if ($e == JSON_ERROR_UTF8 && ($options & JSON_PARTIAL_OUTPUT_ON_ERROR))

139 {

140 return;

141 }

142

143 $message = sprintf(‘%s [%d]’, json_last_error_msg(), $e);

145 }

static throwException($e)

◆ convertData()

static convertData (   $data )
staticprotected

Converts $data to UTF-8 charset.

Аргументы
Возвращает
mixed

См. определение в файле json.php строка 101

102 {

104

105 return Encoding::convertEncoding($data, $culture->getCharset(), ‘UTF-8’);

106 }

◆ decode()

static decode (   $data )
static

Takes a JSON encoded string and converts it into a PHP variable.

Аргументы
string $data The json string being decoded.
Возвращает
mixed
Исключения
См. также
json_decode

См. определение в файле json.php строка 53

54 {

55 $res = json_decode($data, true);

56

58

59

60 if($res === null && strtolower($data) != ‘null’)

61 {

63 }

64

66 {

68 }

69

70 return $res;

71 }

static checkException($options=0)

static unConvertData($data)

◆ encode()

static encode (   $data,
  $options = null 
)
static

Returns a string containing the JSON representation of $data.

Аргументы
mixed $data The value being encoded.
null $options Bitmasked options. Default is JSON_HEX_TAG|JSON_HEX_AMP|JSON_HEX_APOS|JSON_HEX_QUOT.
Возвращает
mixed
Исключения
См. также
json_encode

Переопределяется в YandexJson.

См. определение в файле json.php строка 24

25 {

27 {

30 }

31

32 if (is_null($options))

33 {

34 $options = JSON_HEX_TAG|JSON_HEX_AMP|JSON_HEX_APOS|JSON_HEX_QUOT;

35 }

36

37 $res = json_encode($data, $options);

38

40

41 return $res;

42 }

static serializeJson(&$data)

static convertData($data)

◆ serializeJson()

static serializeJson ( $data )
staticprotected

Executes serializeJson on JsonSerializable objects for non-UTF8 instances. We have to do it manually to prevent «malformed UTF-8 characters» error.

Аргументы

См. определение в файле json.php строка 79

80 {

81 if($data instanceof JsonSerializable)

82 {

83 $data = $data->jsonSerialize();

84 }

85

86 if (is_iterable($data))

87 {

88 foreach ($data as $key => $value)

89 {

91 }

92 }

93 }

◆ throwException()

static throwException (   $e )
staticprotected

Throws exception with message given.

Аргументы
string $e Exception message.
Возвращает
void
Исключения

См. определение в файле json.php строка 155

156 {

157 throw new ArgumentException(‘JSON error: ‘.$e, ‘data’);

158 }

◆ unConvertData()

static unConvertData (   $data )
staticprotected

Converts $data from UTF-8 charset.

Аргументы
Возвращает
mixed

См. определение в файле json.php строка 114

115 {

117

118 return Encoding::convertEncoding($data, ‘UTF-8’, $culture->getCharset());

119 }

◆ JSON_ERROR_UNKNOWN

const JSON_ERROR_UNKNOWN = -1

См. определение в файле json.php строка 12


Объявления и описания членов класса находятся в файле:

  • C:/Bitrix/modules/main/lib/web/json.php

Контроллеры — это часть MVC архитектуры, которая отвечает за обработку запроса и генерирование ответа. Сразу оговоримся, что дальше речь пойдет про компоненты-контроллеры в контексте Bitrix Framework.

Битрикс-контроллер принимает от клиента запрос и возвращает JSON с результатом или ошибкой. Классы-контроллеры содержат одно или несколько методов-действий и являются надстройкой над обычными компонентами, поэтому их нужно размещать в файле class.php компонента.

Бекенд

Тут все просто: в компоненте нужно реализовать интерфейс Controllerable, в ктором есть метод configureActions(). Этот метод возвращает массив с действиями которые можно вызвать. Например, для действия send нужно будет создать метод sendAction.

Метод-действие возвращает массив, который затем отдается клиенту в виде JSON.

Если требуется отдавать на сторону клиента ошибки, то нужно реализовать интерфейс Errorable, в котором есть методы getErrors() и getErrorByCode(). Также нужно будет реализовать коллекцию ошибок ErrorCollection, ее удобнее всего создать в методе onPrepareComponentParams().

В качестве простого примера создадим контроллер для формы обратной связи. Компонент пусть называется machaon:feedback, код контроллера разместится в файле /local/components/machaon/feedback/class.php.

<?php
//local/components/machaon/feedback/class.php

namespace MachaonComponents;

use BitrixMainError;
use BitrixMainErrorable;
use BitrixMainErrorCollection;
use BitrixMainEngineActionFilter;
use BitrixMainEngineContractControllerable;
use CBitrixComponent;

class FeedbackComponent extends CBitrixComponent implements Controllerable, Errorable
{
    protected ErrorCollection $errorCollection;

    public function onPrepareComponentParams($arParams)
    {
        $this->errorCollection = new ErrorCollection();
        return $arParams;
    }

    public function executeComponent()
    {
        // Метод не будет вызван при ajax запросе
    }

    public function getErrors(): array
    {
        return $this->errorCollection->toArray();
    }

    public function getErrorByCode($code): Error
    {
        return $this->errorCollection->getErrorByCode($code);
    }

    // Описываем действия
    public function configureActions(): array
    {
        return [
            'send' => [
                'prefilters' => [
                    // здесь указываются опциональные фильтры, например:
                    new ActionFilterAuthentication(), // проверяет авторизован ли пользователь
                ]
            ]
        ];
    }

    // Сюда передаются параметры из ajax запроса, навания точно такие же как и при отправке запроса.
    // $_REQUEST['username'] будет передан в $username, $_REQUEST['email'] будет передан в $email и т.д.
    public function sendAction(string $username = '', string $email = '', string $message = ''): array
    {
        try {
            $this->doSomeWork();
            return [
                "result" => "Ваше сообщение принято",
            ];
        } catch (ExceptionsEmptyEmail $e) {
            $this->errorCollection[] = new Error($e->getMessage());
            return [
                "result" => "Произошла ошибка",
            ];
        }
    }
}

Фронтенд

В js-библиотеке Битрикс уже есть функция для отправки запросов. Далее простой пример, где machaon:feedback это имя компонента, send — имя действия, а в data: {} передаются необходимые данные:

BX.ajax.runComponentAction("machaon:feedback", "send", {
    mode: "class",
    data: {
        "email": "vasya@email.tld",
        "username": "Василий",
        "message": "Где мой заказ? Жду уже целый час!"
    }
}).then(function (response) {
    // обработка ответа
});

Если все хорошо, с бэкенда нам вернется:

{
    "status": "success",
    "data": {
        "result": "Письмо отправлено"
    },
    "errors": []
}

Либо сообщение об ошибке:

{
    "status": "error",
    "data": {
        "result": "Произошла ошибка"
    },
    "errors": [{
        "message": "Не заполено поле Email",
        "code": 0,
        "customData": null
    }]
}

Отправка запроса напрямую

Если не хочется использовать BX.ajax.runComponentAction(), можно отправить запрос напрямую, например используя jQuery. Нужно отправить запрос на /bitrix/services/main/ajax.php, он будет выглядеть примерно так:

$.post(
    "/bitrix/services/main/ajax.php?mode=class&c=machaon:feedback&action=send",
    {
        "email": "vasya@email.tld",
        "username": "Василий",
        "message": "Где мой заказ? Жду уже целый час!"
    },
    function (response) {
        console.log(response);
    }
);

В параметре mode передается обязательное значение class, в c передается имя компонента в формате vendor:component, action это запускаемый метод.

Эти параметры обязательно должны передаваться в адресе запроса, иначе происходит ошибка.

email, username и message станут затем параметрами $email, $username и $message в методе sendAction().

Использование ЧПУ

Также можно в urlrewrite.php прописать красивый адрес, например /api/rest-component/<component_vendor>/<component_name>/<action>/.

Для этого добавим в urlrewrite.php следующий массив:

$arUrlRewrite = [
    // ...
    [
        "CONDITION" => "#^/api/rest-component/([a-zA-Z0-9]+)/([a-zA-Z0-9.]+)/([a-zA-Z0-9]+)/?.*#",
        "RULE" => "mode=class&c=$1:$2&action=$3",
        "PATH" => "/bitrix/services/main/ajax.php",
    ],
];

Тогда запрос будет выглядеть понятнее:

function sendFeedback(form) {
    const route = "/api/rest-component/machaon/feedback/send/";
    const data = $(form).serialize();
    $.post(route, data, function (response) {
        console.log(response);
    });
}

Нюансы

Если в configureActions() оставить пустой массив prefilters, то метод-действие будет работать без фильтров.

Но если не указывать ключ prefilters, то будут применены фильтры по умолчанию — ActionFilterAuthentication и ActionFilterCsrf.

public function configureActions(): array
{
    return [
        'send' => [
            'prefilters' => [] // метод sendAction() будет работать без фильтров
        ]
    ];
}
public function configureActions(): array
{
    return [
        'send' => []  // метод sendAction() будет работать у авторизованных пользователей, которые передали CSRF-токен
    ];
}

Пример ошибки когда пользователь не авторизован и не передал токен:

{
  "status": "error",
  "data": null,
  "errors": [
    {
      "message": "Необходимо авторизоваться на сайте",
      "code": "invalid_authentication",
      "customData": null
    },
    {
      "message": "Invalid csrf token",
      "code": "invalid_csrf",
      "customData": {
        "csrf": "dc8adda3ac983217623cf1196dfc5c61"
      }
    }
  ]
}

Если требуется CSRF-защита, то для фильтра BitrixMainEngineActionFilterCsrf нужно передать идентификатор сессии в параметре sessid.

На бэкенде его можно получить функцией bitrix_sessid(), на фронтенде — BX.bitrix_sessid().

При использовании BX.ajax.runComponentAction() сессия передается автоматически.

Другие фильтры можно посмотреть в документации

У меня очень странная проблема.

У меня есть веб-сервис JSON.

Когда я проверяю это на этом сайте http://www.freeformatter.com/json-formatter.html#ad-output

Все отлично.

Но когда я загружаю свой JSON с этим кодом:

  $data = file_get_contents('http://www.mywebservice');

if(!empty($data))
{

$obj = json_decode($data);

switch (json_last_error()) {
case JSON_ERROR_NONE:
echo ' - JSON_ERROR_NONE';
break;
case JSON_ERROR_DEPTH:
echo ' - JSON_ERROR_DEPTH';
break;
case JSON_ERROR_STATE_MISMATCH:
echo ' - JSON_ERROR_STATE_MISMATCH';
break;
case JSON_ERROR_CTRL_CHAR:
echo ' -  JSON_ERROR_CTRL_CHAR';
break;
case JSON_ERROR_SYNTAX:
echo "rnrn - SYNTAX ERROR rnrn";
break;
case JSON_ERROR_UTF8:
echo ' - JSON_ERROR_UTF8';
break;
default:
echo ' - Unknown erro';
break;
}

Я получил ошибку: SYNTAX ERROR

ЧТО НЕ ПОМОГАЕТ ПОЛНОЙ ВСЕ.

Это кошмар.

Я вижу, что с PHP 5.5 я мог бы использовать эту функцию: http://php.net/manual/en/function.json-last-error-msg.php

(но мне пока не удалось установить PHP 5.5, и я не уверен, что эта функция даст мне больше деталей)

26

Решение

Я столкнулся с той же проблемой, на самом деле есть некоторые скрытые символы, невидимые, и вам нужно удалить его.
Вот глобальный код, который работает во многих случаях:

<?php
$checkLogin = file_get_contents("http://yourwebsite.com/JsonData");

// This will remove unwanted characters.
// Check http://www.php.net/chr for details
for ($i = 0; $i <= 31; ++$i) {
$checkLogin = str_replace(chr($i), "", $checkLogin);
}
$checkLogin = str_replace(chr(127), "", $checkLogin);

// This is the most common part
// Some file begins with 'efbbbf' to mark the beginning of the file. (binary level)
// here we detect it and we remove it, basically it's the first 3 characters
if (0 === strpos(bin2hex($checkLogin), 'efbbbf')) {
$checkLogin = substr($checkLogin, 3);
}

$checkLogin = json_decode( $checkLogin );
print_r($checkLogin);
?>

64

Другие решения

Удаление BOM (Byte Order Mark) часто является решением, которое вам нужно:

function removeBOM($data) {
if (0 === strpos(bin2hex($data), 'efbbbf')) {
return substr($data, 3);
}
return $data;
}

У вас не должно быть спецификации, но если она есть, она невидима, поэтому вы ее не увидите !!

увидеть W3C в спецификации в HTML

использование BOM Cleaner если у вас есть много файлов, чтобы исправить.

38

Я решил эту проблему, добавив stripslashes в строку, перед json_decode.

$data = stripslashes($data);
$obj = json_decode($data);

22

Чтобы собрать все вместе, я подготовил JSON-оболочку с расшифровкой автокорректирующих действий. Самую последнюю версию можно найти в моем GitHub Gist.

abstract class Json
{
public static function getLastError($asString = FALSE)
{
$lastError = json_last_error();

if (!$asString) return $lastError;

// Define the errors.
$constants = get_defined_constants(TRUE);
$errorStrings = array();

foreach ($constants["json"] as $name => $value)
if (!strncmp($name, "JSON_ERROR_", 11))
$errorStrings[$value] = $name;

return isset($errorStrings[$lastError]) ? $errorStrings[$lastError] : FALSE;
}

public static function getLastErrorMessage()
{
return json_last_error_msg();
}

public static function clean($jsonString)
{
if (!is_string($jsonString) || !$jsonString) return '';

// Remove unsupported characters
// Check http://www.php.net/chr for details
for ($i = 0; $i <= 31; ++$i)
$jsonString = str_replace(chr($i), "", $jsonString);

$jsonString = str_replace(chr(127), "", $jsonString);

// Remove the BOM (Byte Order Mark)
// It's the most common that some file begins with 'efbbbf' to mark the beginning of the file. (binary level)
// Here we detect it and we remove it, basically it's the first 3 characters.
if (0 === strpos(bin2hex($jsonString), 'efbbbf')) $jsonString = substr($jsonString, 3);

return $jsonString;
}

public static function encode($value, $options = 0, $depth = 512)
{
return json_encode($value, $options, $depth);
}

public static function decode($jsonString, $asArray = TRUE, $depth = 512, $options = JSON_BIGINT_AS_STRING)
{
if (!is_string($jsonString) || !$jsonString) return NULL;

$result = json_decode($jsonString, $asArray, $depth, $options);

if ($result === NULL)
switch (self::getLastError())
{
case JSON_ERROR_SYNTAX :
// Try to clean json string if syntax error occured
$jsonString = self::clean($jsonString);
$result = json_decode($jsonString, $asArray, $depth, $options);
break;

default:
// Unsupported error
}

return $result;
}
}

Пример использования:

$json_data = file_get_contents("test.json");
$array = Json::decode($json_data, TRUE);
var_dump($array);
echo "Last error (" , Json::getLastError() , "): ", Json::getLastError(TRUE), PHP_EOL;

6

Вы не показывали свой JSON, но это похоже на то, что это может быть неверная последовательность UTF-8 в аргументе, большинство онлайн-валидаторов не поймают его.
убедитесь, что ваши данные UTF-8, а также проверьте, есть ли у вас иностранные символы.
Вам не нужен PHP5, чтобы увидеть вашу ошибку, используйте журнал ошибок() регистрировать проблемы.

1

Попробовав все решение без результата, это сработало для меня.

Надеюсь, это поможет кому-то

$data = str_replace('&quot;', '"', $data);

0

У меня была такая же проблема. Для меня это было вызвано echo "<br/><pre>", Я пытался передать строку JSON в другой файл PHP с помощью exit(json_encode(utf8ize($resp_array))); В начале файла я объявил линия разрыва тег … Так что это была ошибка для меня. Удаление этого разрыв строки тега , Я был в состоянии расшифровать мою строку JSON другой файл PHP ..

-1

У меня была такая же проблема. Для меня это было вызвано echo "<br/><pre>",

Я пытался передать строку JSON в другой файл PHP с помощью:

exit(json_encode(utf8ize($resp_array)));

В начале файла я объявил тег разрыва строки … Так что это была ошибка для меня. Удалив этот тег разрыва строки, я смог […]

-1

Понравилась статья? Поделить с друзьями:
  • Json error unknown
  • Json error syntax error 4 100
  • Json error status 200
  • Json error online
  • Json error none