Имя: Пароль:
1C
1С v8
Парсер JSON
0 Vito
 
25.07.22
21:48
Столкнулся с ошибкой "Непредвиденный символ при чтении JSON". Причем именно этот JSON парсится: php (работает существующий сервис), в GAS на google.
Погуглив понял, что, видимо, где-то пакет не совсем точно соответствует стандарту JSON.
Запрос приходит с вешнего источника, на который я не могу повлиять.
Погуглив я понял, что проблема встречается достаточно часто, но ответов не нашел.

Что делать:

1. Искать какой-то другой невстроенный парсер? Посоветуете?
2. Прогонять запрос через какой-то транзитный сервер, там исправлять и уже потом передавать в 1С? Например, на гугле?
1 Мультук
 
гуру
25.07.22
22:00
(0)

Дело в имени поля ?
2 Aleksey
 
25.07.22
22:01
а что нельзя по старинке парсить как текст?
3 Мультук
 
гуру
25.07.22
22:03
(0)

думми = ПрочитатьJSON(чтениеЖсон, ИСТИНА);

или всё гораздо хуже?
4 Garykom
 
гуру
25.07.22
22:11
(0)

Глобальный контекст (Global context)
ПрочитатьJSON (ReadJSON)
Синтаксис:
ПрочитатьJSON(<ЧтениеJSON>, <ПрочитатьВСоответствие>, <ИменаСвойствСоЗначениямиДата>, <ОжидаемыйФорматДаты>, <ИмяФункцииВосстановления>, <МодульФункцииВосстановления>, <ДополнительныеПараметрыФункцииВосстановления>, <ИменаСвойствДляОбработкиВосстановления>, <МаксимальнаяВложенность>)
Параметры:
<ЧтениеJSON> (обязательный)
Тип: ЧтениеJSON.
Объект чтения JSON.
<ПрочитатьВСоответствие> (необязательный)
Тип: Булево.
Если установлено Истина, чтение объекта JSON будет выполнено в Соответствие.
Если установлено Ложь, объекты будут считываться в объект типа Структура.
Примечание. При десериализации объектов JSON в структуру необходимо помнить о требованиях к ключам структуры. Если при десериализации объекта будет найдено имя свойства, недопустимое для ключа структуры, то будет вызвано исключение.
Значение по умолчанию: Ложь.
<ИменаСвойствСоЗначениямиДата> (необязательный)
Тип: Массив, Строка, ФиксированныйМассив.
Массив, элементы которого содержат имена свойств JSON, для которых нужно вызывать восстановление даты из строки.
Если имя свойства указано в этом параметре и указано в параметре ИменаСвойствДляОбработкиВосстановления, то для таких свойств восстановление осуществляется в функции восстановления.
Если восстановление даты из значения свойства невозможно, то будет сгенерировано исключение.
Значение по умолчанию: Неопределено.
<ОжидаемыйФорматДаты> (необязательный)
Тип: ФорматДатыJSON.
Ожидаемый формат даты при десериализации объекта в формате JSON.
Если в результате десериализации значение не является строкой и имеет формат даты, отличный от ожидаемого, то будет вызвано исключение.
Значение по умолчанию: ISO.
<ИмяФункцииВосстановления> (необязательный)
Тип: Строка.
Данная функция вызывается при чтении каждого свойства и должна иметь следующие параметры:
<Свойство> - значение типа Строка, указывается только при чтении объектов JSON,
<Значение> - значение допустимого для сериализации типа,
<ДополнительныеПараметры>.
Возвращаемое значение - произвольного типа.
Если данный параметр задан и не задан параметр <МодульФункцииВосстановления>, и наоборот, будет вызвано исключение.
Если функция не установлена, то при вызове метода ПрочитатьJSON параметр <ИменаСвойствСоЗначениямиДата> игнорируется.
Значение по умолчанию: Неопределено.
<МодульФункцииВосстановления> (необязательный)
Тип: Произвольный.
Указывает модуль, процедура которого будет использована для восстановления значения.
Значение по умолчанию: Неопределено.
<ДополнительныеПараметрыФункцииВосстановления> (необязательный)
Тип: Произвольный.
Дополнительные параметры, которые будут переданы в функцию восстановления значений.
Значение по умолчанию: Неопределено.
<ИменаСвойствДляОбработкиВосстановления> (необязательный)
Тип: Массив.
Массив имен свойств JSON, для которых будет вызвана функция восстановления.
Параметр игнорируется, если не установлен параметр ИмяФункцииВосстановления.
Значение по умолчанию: Неопределено.
<МаксимальнаяВложенность> (необязательный)
Тип: Число.
Максимальный уровень вложенности объекта JSON.
При превышении уровня вложенности будет сгенерировано исключение.
Значение по умолчанию: 500.
Возвращаемое значение:
Тип: Произвольный.
Описание:
Считывает значение из JSON-текста или файла. JSON-текст должен быть корректным.
Доступность:
Тонкий клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер, интеграция.
Примечание:
Массив будет десериализован в массив. Объект JSON будет преобразован в соответствие или структуру (если ключ структуры окажется недопустимым, будет вызвано исключение).
Для дат действует аналогично методу ПрочитатьДатуJSON.
Во время выполнения метода может быть вызвана пользовательская функция для восстановления значения - для этого следует использовать параметр <ИмяФункцииВосстановления>. Функция восстановления должна быть описана с директивой &НаСервере или &НаКлиенте. Использование функции вне контекста не допускается.
Использование в версии:
Доступен, начиная с версии 8.3.6.
     Методическая информация
5 Vito
 
25.07.22
22:30
(1) не знаю точно, объем информации большой.
(2) Надо писать, поэтому и спрашиваю.
(3) Этот код и выдает ошибку
(4) вот и получается исключение, возможно, из-за превышения уровня вложенности :)
6 Кура-Цеце
 
25.07.22
22:36
Ставлю на BOM
7 Garykom
 
гуру
25.07.22
22:50
(5) сохрани json в файл и глянь hex
8 ДедМорроз
 
26.07.22
00:03
Проверить кодировку,т.к.php однобайтовый и прекрасно читает,а 1с,по умолчанию,предполагает кодировку utf-8,и если это неверно,то ничего не прочитается.
9 Vito
 
26.07.22
09:51
(7) (8) Не успел сделать, т.к. нашел другое решение:
заюзал вот эту библиотеку: https://github.com/vbondarevsky/Connector/blob/master/README.md
Все прочиталось сразу, очень удобный инструмент, все возможности библиотеки не тестил,
10 Kigo_Kigo
 
26.07.22
10:11
У меня такое выдавало когда сервер "не отвечал", точнее отвечал но типа с ошибками , типа Еррор 404, 403, 405
11 trad
 
26.07.22
10:45
(6) ставлю на промо ветку )
12 1Сергей
 
26.07.22
11:34
т.к. автор про кодировку так ничего и не сказал. Ставлю на неё
13 СеменовСемен
 
26.07.22
11:36
Ставлю на редирект
14 Vito
 
26.07.22
12:13
(10) ошибок нет
(12) кодировку не знаю
(13) редиректа нет, это стопудово
15 СеменовСемен
 
26.07.22
12:16
Покажи текст и код ответа
16 trad
 
26.07.22
12:31
(14) кодировка в заголовке Content-Type ответа
17 Vito
 
26.07.22
13:40
(16) Заголовок ответа:
cache-control: no-store, no-cache, must-revalidate
content-encoding: gzip
content-type: text/html; charset=utf-8
date: Tue, 26 Jul 2022 10:29:11 GMT
expires: Thu, 19 Nov 1981 08:52:00 GMT
pragma: no-cache
server: nginx
set-cookie: ad=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; Max-Age=0
vary: Accept-Encoding
vary: Accept-Encoding
vary: User-Agent
18 Кура-Цеце
 
26.07.22
14:09
(17) > content-encoding: gzip
О.
19 Vito
 
26.07.22
14:11
(18) Может быть в этом и есть проблема
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.