JSON и UnJSON в 1С (версия от 27/11/2009)

27.11.09

Разработка - Инструментарий разработчика

JSON и парсер json строк в 1С. Версия от 27/11/2009.
Что нового: в строках можно использовать, как двойные, так и одинарные кавычки и исправлен маленький косячок при парсинге объекта.

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
(только для физ. лиц)
JSON and UnJSON (27/11/2009)
.epf 14,30Kb
510 1 850 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

Парсер имеет недостаток, он не проводит валидацию JSON-строки, поэтому если строка "битая" или неправильная, то результат непредсказуем.
В смысле — в результате работы парсинга будет возвращена какая-нибудь лабуда.

Вступайте в нашу телеграмм-группу Инфостарт

См. также

Инструментарий разработчика Роли и права Запросы СКД Программист Руководитель проекта 1С v8.3 Управляемые формы Запросы Система компоновки данных Платные (руб)

Инструменты для разработчиков 1С 8.3: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.

15500 руб.

02.09.2020    202634    1116    410    

1021

Инструментарий разработчика Чистка данных Свертка базы Инструменты администратора БД Системный администратор Программист Руководитель проекта 1С v8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Россия Платные (руб)

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP, УНФ, КА и т.д.). Поддерживаются серверные и файловые базы, управляемые и обычные формы. Может выполнять свертку одновременно в несколько потоков. А так же автоматически, без непосредственного участия пользователя. Решение в Реестре отечественного ПО

8400 руб.

20.08.2024    35694    206    104    

195

Пакетная печать Печатные формы Инструментарий разработчика Программист 1С v8.3 Запросы 1С:Зарплата и кадры бюджетного учреждения 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Платные (руб)

Расширение для создания и редактирования печатных форм в системе 1С:Предприятие 8.3. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и прозрачность разработки, а также навести порядок в многообразии корпоративных печатных форм.

22200 руб.

06.10.2023    23994    62    26    

92

Инструменты администратора БД Инструментарий разработчика Роли и права Программист 1С v8.3 1C:Бухгалтерия Россия Платные (руб)

Расширение позволяет без изменения кода конфигурации выполнять проверки при вводе данных, скрывать от пользователя недоступные ему данные, выполнять код в обработчиках. Не изменяет данные конфигурации, легко устанавливается практически на любую конфигурацию на управляемых формах.

16000 руб.

10.11.2023    16475    69    39    

88

Инструментарий разработчика Программист 1С v8.3 Платные (руб)

Инструмент для написания и отладки кода в режиме «1С:Предприятие». Представляет собой консоль кода с возможностью пошаговой отладки, просмотра значений переменных любых типов, использования процедур и функций, просмотра стека вызовов, вычисления произвольных выражений на встроенном языке в контексте точки останова, синтаксического контроля и остановки по ошибке. В консоли используется удобный редактор кода с подсветкой, контекстной подсказкой, возможностью вызова конструкторов запроса и форматной строки.

9360 руб.

17.05.2024    34695    123    53    

165

SALE! 30%

Инструментарий разработчика WEB-интеграция 1С v8.3 1C v8.2 1C:Бухгалтерия 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Зарплата и Управление Персоналом 3.x Платные (руб)

Инструмент для генерации OpenApi (Swagger) спецификаций на основании файлов конфигураций 1С. Это консольное и десктопное приложение на языке Rust с полноценным редактором кода, содержащим автозамену и подсвечивание ошибок для быстрого и безошибочного написания документирующего комментария.

18000 12600 руб.

22.11.2024    1754    1    0    

8

Инструментарий разработчика Программист 1С v8.3 1C:Бухгалтерия Россия Платные (руб)

Восстановление партий или взаиморасчетов, расчет зарплаты, пакетное формирование документов или отчетов - теперь все это стало доступнее. * Есть желание повысить скорость работы медленных алгоритмов! Но... * Нет времени думать о реализации многопоточности? * о запуске и остановке потоков? * о поддержании потоков в рабочем состоянии? * о передаче данных в потоки и как получить ответ из потока? * об организации последовательности? Тогда ЭТО - то что надо!!!

6000 руб.

07.02.2018    107164    249    100    

313

Инструментарий разработчика 1С v8.3 1C:Бухгалтерия 1С:ERP Управление предприятием 2 Платные (руб)

Разработка Конструктор автоматизированных рабочих мест "Конструктор АРМ" реализована в виде расширения и является универсальным инструментом для создания АРМ любой сложности в пользовательском режиме.

3600 руб.

27.12.2024    2873    6    0    

11
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. so-quest 140 20.11.09 13:55 Сейчас в теме
Авансом. Ибо не смотрел.
2. Evg-Lylyk 5123 20.11.09 14:27 Сейчас в теме
Привел бы реальный полезный пример допустим парсинг текста запроса
3. BigB 193 20.11.09 14:56 Сейчас в теме
(2) Если честно - то я не понял ваш вопрос. Как можно, а главное для чего нужно парсить текст запроса? Если не сложно уточните по подробнее
4. Evg-Lylyk 5123 20.11.09 18:17 Сейчас в теме
(3) Ну например для контекстной подсказки в запросе.
Ну если парсить ну что нить приближенное к 1С можно Текст встроенного языка
5. WKBAPKA 216 22.11.09 12:47 Сейчас в теме
2(2): а чего его парсить то? парсить несложно, а вот все что дальше делать с результатом парсинга уже посложнее...
6. Evg-Lylyk 5123 22.11.09 13:09 Сейчас в теме
(5) Хотел сказать что желательно пример по теме 1С
7. BigB 193 23.11.09 07:09 Сейчас в теме
(6) формат передачи json удобно использовать в связке с JavaScript. В самой 1С его нет смысла использовать.
8. BigB 193 26.11.09 07:37 Сейчас в теме
Полностью обезглючил парсер. Пользуйтесь на здоровье.
andreich_ru; nastrip; Трактор; tango; EugeneM; +5 Ответить
44. Поручик 4594 25.11.15 15:36 Сейчас в теме
Функцию Экранировать тоже пришлось пофиксить, иначе декодирование на php json_decode падает с ошибкой. Смысл фикса в добавлении дополнительного слэша \ к спецсимволам.

//Экранирует недопустимые символы
Функция Экранировать(Стр)
	Х=СтрЗаменить(Стр,"""","\""");
	//Х=СтрЗаменить(Х,"'","\'"); //??? Не уверен в этой строке. Кто нибудь может подтвердить или опровергнуть нужность этой строки.
	Х=СтрЗаменить(Х,"\","\\");
	Х=СтрЗаменить(Х,"/","\/"); //Тут тоже не уверен, но пока оставлю.
	Х=СтрЗаменить(Х,Символ(8),"\\b");
	Х=СтрЗаменить(Х,Символы.ПФ,"\\f");
	Х=СтрЗаменить(Х,Символы.ПС,"\\n");
	Х=СтрЗаменить(Х,Символы.ВК,"\\r");
	Х=СтрЗаменить(Х,Символы.Таб,"\\t");
	Х=СтрЗаменить(Х,Символы.ВТаб,"\\v");
	Возврат Х
КонецФункции
Показать
45. BigB 193 25.11.15 16:18 Сейчас в теме
(44) Поручик, сайт покоцал код. Не понял, что вы изменили?
9. BigB 193 27.11.09 08:23 Сейчас в теме
Извините, но новая версия. Что нового: в строках можно использовать, как двойные, так и одинарные кавычки и исправлен маленький косячок при парсинге объекта.
10. terris 02.12.09 02:01 Сейчас в теме
Спасибо. Давно искал парсер для 1С.
11. d.snissarenko 153 06.01.11 20:37 Сейчас в теме
12. parallel588 07.09.11 11:00 Сейчас в теме
13. ctulhua 29.09.11 13:01 Сейчас в теме
Все отлично, пара мелких глюков, элементарно исправляемых и можно лететь в космос)
14. BigB 193 04.10.11 12:02 Сейчас в теме
(13) ctulhua, какие именно глюки?
15. Ortos 21.01.12 12:26 Сейчас в теме
Пригодилось! Спасибо!
16. BigShmax 15.02.12 12:12 Сейчас в теме
Хмм мне принесли инструкцию API для автоматизации закзов в интернет магазине фирмы КАЛИТА про жалюзи. мне этот парсер ни как не может быть полезен? я вообще не знаю с какой стороны подойти к поставленной задаче :-( нужно из заказа покупателей жалюзи заказать при помощи этого чудо JSON о котором я услышал в первые 10 митнут назад :-(
SoftPlus; +1 Ответить
17. spacedragon 03.03.12 17:54 Сейчас в теме
При работе с ВЕБ сервисом, который принимает запросы в JSON и отвечает также всплыла интересная ситуация. Стандратный РНР парсер не понимает строку из 1С из-за символа BOM (Символ.НПП). Пришлось в запросе НТТР.POST предварительно перезаписывать файл для того, чтобы убрать первые 3 невидимых символа. Кто нибудь такое встречал? Ваш парсер такую ситуацию как то обыграет?
26. xzorkiix 35 04.06.14 09:41 Сейчас в теме
(17) spacedragon, а как именно перезаписывали? подозреваю, что у меня именно в этом ошибка.

Текст = Новый ТекстовыйДокумент;
Текст.ДобавитьСтроку(JSONСтрока);
Текст.Записать(ИмяФайлаЗапроса,КодировкаТекста.UTF8);

Запрос.УстановитьТелоИзДвоичныхДанных(Новый ДвоичныеДанные(ИмяФайлаЗапроса));
Ответ = Соединение.ОтправитьДляОбработки(Запрос);
27. BigB 193 04.06.14 10:27 Сейчас в теме
(26) xzorkiix, покажите код побольше или прикрепите свою обработку к сообщению. Может чем и помогу.
28. xzorkiix 35 05.06.14 17:00 Сейчас в теме
(27) разобрался (в 8.3.5 точно работает)

// http://help1c.com/faq8/view/1404.html
// Как записать файл в кодировке UTF-8 без BOM
Функция ЗаписатьФайлВформате_UTF8_без_BOM(текст,полноеИмяФайла) Экспорт

// записываем в файл с символами BOM в начале файле
ТекстовыйФайлUTF8_Bom = Новый ТекстовыйДокумент();
ТекстовыйФайлUTF8_Bom.ДобавитьСтроку(текст);
ТекстовыйФайлUTF8_Bom.Записать(полноеИмяФайла,"UTF-8");

// открываем файл и считываем символы после символов BOM
Данные = Новый ДвоичныеДанные(полноеИмяФайла);
Строка64=Base64Строка(Данные);
Строка64=Прав(Строка64,СтрДлина(Строка64)-4);
ДанныеНаЗапись=Base64Значение(Строка64);
ДанныеНаЗапись.Записать(полноеИмяФайла); // записываем

КонецФункции

18. spacedragon 03.03.12 18:32 Сейчас в теме
19. BigB 193 05.03.12 09:17 Сейчас в теме
20. artemkab@yandex.ru 10.04.12 02:27 Сейчас в теме
Вещица очень кстати, пробую ))
21. buzzzard 51 28.04.12 02:01 Сейчас в теме
OAuth2.0 у Google, на втором этапе авторизации выдает JSON вида:
{
  "access_token" : "ya29.AHES6ZRmi4n2MK9hBTtD0Uu5W2E8Syxs_lHg",
  "token_type" : "Bearer",
  "expires_in" : 3600,
  "id_token" : "eyJhbGciOiJSUzI1NiJ9.eyJpc3MiOiJhY2N-DqKlZ9camBK_oF5rPfstZ3Ei89nsUQ",
  "refresh_token" : "1/_KwyqNDsjz9pGzBSqF2RDpJ2PKHYX2BgYIjIQMY0nCA"
}


Так вот параметр refresh_token после JSON -> UnJSON -> JSON получается таким:
"refresh_token":"1\/_KwyqNDsjz9pGzBSqF2RDpJ2PKHYX2BgYIjIQMY0nCA"


Разбираться не стал. Пока интересен только UnJSON, а он правильно отработал.

Спасибо огромное за труд!
22. silberRus 73 18.04.13 15:34 Сейчас в теме
Не получается отправляю этим парсером картинки закодированные в base64 (
23. Elisy 955 11.06.13 20:16 Сейчас в теме
Добрый день,
попытался воспользоваться JSON-сериализацией.
Есть 2 момента.
1. Сериализация двойных кавычек в строке у вас переводится в \\" (т.е. с лишним обратным слешем)
2. Думаю, что сериализацию типа Ссылка лучше сделать в виде идентификатора. Сейчас Ссылка сериализуется в Наименование.
Спасибо
24. slavik27 107 20.06.13 06:41 Сейчас в теме
Спасибо, вещь интересная
25. Alexandr671 05.09.13 11:00 Сейчас в теме
А где файлик то???
$m сняли а фалик не дали???
29. Serg3141 13 02.08.14 00:41 Сейчас в теме
Супер, сэкономил себе кучу времени, спасибо большое
30. BigB 193 04.08.14 06:22 Сейчас в теме
(29)Да пожалуйста. Пользуйтесь на здоровье :)
31. Serg3141 13 08.08.14 18:21 Сейчас в теме
В работе с этим ПО наткнулся на такую вещь. Удаленный сервер по запросу выдавал строку json, в которой использовались индексы, по своему написанию полностью соответствующие УИД в 1С. При загрузке ПО переводило эти индексы в УИД 1С. Но дело в том, что в моей ситуации это были индексы, а не УИД и этот удаленный сервер (сторонние разработчики) выдавал их в верхнем регистре. После преобразования индексов в УИД строковое написание УИД становилось в маленьком регистре, соответственно связь по индексам терялась. Может стоит ввести некий настроечный параметр, что-то вроде этого "ПреобразовыватьСтроковоеПредставлениеУИД=Истина", чтобы можно было избежать таких казусов, а кому нужно как установить параметр, тот так и установит.
32. BigB 193 08.08.14 21:09 Сейчас в теме
(31)Можете пример показать?
33. Serg3141 13 10.08.14 17:14 Сейчас в теме
вот начало json-строки:
{"jsonrpc":"2.0","errors":[],"notifications":[],"result":{"Time":"2014-08-10T17:06:39+04:00","RequestID":"53e76e52af632c4c0f000000","Format":"Combined","Data":[{"Gate":"Production","GDS":"AmadeusWS","Office":null,"RecommendationID":"D308D0C5-EA60-44B8-A346-544CB8870341","RecommendationGDSID":"1","ValidatingAirline":"SU","ValidatingAirlines":"SU","LastTicketDate":1403985600,"Refundable":"No","ETicket":true,"Itineraries":[{"ItineraryID":0,"Variants":[{"VariantID":"DB6713B2-2ED6-491B-8DCB-F8F53968D84E","VariantGDSID":"1","Duration":80

здесь как раз два разных ID в верхнем регистре.
34. BigB 193 11.08.14 09:26 Сейчас в теме
(33)Функция UnJson с УИДами не работает. Они для неё являются простыми строками.
После преобразования индексов в УИД строковое написание УИД становилось в маленьком регистре

Кто мешает воспользоваться функцией ВРег?
35. Serg3141 13 12.08.14 11:12 Сейчас в теме
(34) мешает то, что разработчик не гарантирует, что те самые последовательности символов останутся в верхнем регистре при смене ПО (а у них периодически это происходит). Да для себя я проблем не вижу - там УИД точно передаваться не будет, так что я просто закомментировал преобразование в УИД, и все. Я просто подумал, что следует такую, возможно и мелочь, подсказать. Я из-за нее потратил время, пока разобрался, что у меня регистр меняется.
36. BigB 193 08.10.14 08:59 Сейчас в теме
УРА! СВЕРШИЛОСЬ!
В платформе 8.3.6 будет встроенный JSON!
Средства работы с JSON из Зазеркалья
Осталось дождаться выхода платформы.
xzorkiix; +1 Ответить
38. xzorkiix 35 15.10.14 10:21 Сейчас в теме
(36) пришел увидеть здесь именно этот комментарий :)
39. BigB 193 15.10.14 11:40 Сейчас в теме
37. ekaruk 5029 14.10.14 12:35 Сейчас в теме
Спасибо за обработку. Срочно понадобился JSON.
Просто подключается, все корректно распознает.
40. stanru1 91 28.10.14 18:03 Сейчас в теме
Спасибо большое! В ожидании реализации от 1С вы сэкономили мне кучу времени :-)
41. Elisy 955 28.11.14 08:03 Сейчас в теме
По скорости, если кому-то интересно. Сериализация Json работает очень медленно по сравнению с XML-сериализацией.
Оптимизация делалась для веб-сайта http://www.oboi.kg
На данных из примерно 5 тысяч записей таблицы значений перевод в XML уменьшил время обработки со 120 секунд (2 минуты) до 4 секунд.
42. BigB 193 29.11.14 23:03 Сейчас в теме
(41) Конечно же скорость сериализации в XML будет быстрее, потому что она делается средствами платформы. Сериализация же в json делается средствами языка.
В платформе 8.3.6 сериализация в json то же будет средствами платформы. Я полагаю, что скорость будет не хуже, а может быть, даже лучше чем при сериализации в XML.
43. Patriot1S 101 29.04.15 12:24 Сейчас в теме
В Функции ПолучитьЗначениеJSON( я бы изменил строку

Объект=Новый Соответствие; на Объект=Новый Структура;

Для совместимости со встроенным JSON 8.3.Хотя понимаю, что скорость работы упадет.
46. sikuda 679 21.01.16 15:37 Сейчас в теме
Х=СтрЗаменить(Стр,"""","\""");
и потом 
Х=СтрЗаменить(Х,"\","\\");


Это специально чтобы внутри строки символ " превращался в \\" а не в \"

Исправил
 
Х=СтрЗаменить(Х,"\","\\");
//Х=СтрЗаменить(Х,"'","\'"); //убрать точно
Х=СтрЗаменить(Стр,"""","\""");
jobkostya1c_ERP; BigB; +2 Ответить
47. BigB 193 23.01.16 19:25 Сейчас в теме
48. Sibcar 3 31.05.17 08:19 Сейчас в теме
Для какой версии платформы обработка?
49. BigB 193 31.05.17 16:29 Сейчас в теме
(48) Для любой. Изначально писалось под 8.1.
JSON формируется и парсится средствами языка, а не средствами платформы.
Сейчас я полагаю, что обработка уже не актуальна.
50. Sibcar 3 01.06.17 06:40 Сейчас в теме
51. echo77 1926 22.07.17 17:20 Сейчас в теме
(49) Для тех, кто еще сидит на старых версиях платформы - актуальна.
А так, одна функция подобная функция делает все быстрее и проще.
Функция UnJSONШтатно(СтрJSON) Экспорт
	
	ЧтениеJSON = Новый ЧтениеJSON;
	ЧтениеJSON.УстановитьСтроку(СтрJSON);
	
	Значение = ПрочитатьJSON(ЧтениеJSON, Истина);
	
	ЧтениеJSON.Закрыть();
	
	Возврат Значение
	
КонецФункции
Показать
52. BigB 193 23.07.17 21:58 Сейчас в теме
(51) Вот код который я сам сейчас использую:
Функция JSON(Структура) Экспорт
	ЗаписьJSON=Новый ЗаписьJSON;
	ЗаписьJSON.УстановитьСтроку();
	ЗаписатьJSON(ЗаписьJSON,Структура,Новый НастройкиСериализацииJSON,"ПреобразованиеJSON",JSON);
	Возврат ЗаписьJSON.Закрыть()
КонецФункции

Функция ПреобразованиеJSON(Свойство, Значение, ДополнительныеПараметры, Отказ) Экспорт
	Если Значение=Null Тогда
		Возврат Неопределено
	ИначеЕсли ТипЗнч(Значение)=Тип("ТаблицаЗначений") Тогда
		Колонки=Значение.Колонки;
		Массив=Новый Массив;
		Для Каждого СтрокаТЗ Из Значение Цикл
			Структура=Новый Структура;
			Для Каждого Колонка Из Колонки Цикл
				Структура.Вставить(Колонка.Имя,СтрокаТЗ[Колонка.Имя])
			КонецЦикла;
			Массив.Добавить(Структура);
		КонецЦикла;
		Возврат Массив
	Иначе
		Возврат Строка(Значение)
	КонецЕсли;
	Отказ=Истина
КонецФункции

Функция UnJSON(СтрокаJSON) Экспорт
	ЧтениеJSON=Новый ЧтениеJSON;
	ЧтениеJSON.УстановитьСтроку(СтрокаJSON);
	Значение=ПрочитатьJSON(ЧтениеJSON);
	ЧтениеJSON.Закрыть();
	Возврат Значение
КонецФункции
Показать
53. echo77 1926 24.07.17 19:21 Сейчас в теме
(52)
Значение=ПрочитатьJSON(ЧтениеJSON);

Читает в Структуру, что не всегда хорошо. Даже в этой публикации вы пишите, код, который читает в соответствие, поэтому лучше так:
Значение = ПрочитатьJSON(ЧтениеJSON, Истина);
54. пользователь 25.09.22 19:40
Сообщение было скрыто модератором.
...
Оставьте свое сообщение