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

27.11.09

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

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

Скачать файлы

Наименование Файл Версия Размер
JSON and UnJSON (27/11/2009)
.epf 14,30Kb
507
.epf 14,30Kb 507 Скачать

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

См. также

SALE! 20%

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

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

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

13000 10400 руб.

02.09.2020    121544    670    389    

709

SALE! 25%

Infostart PrintWizard

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

Инструмент, позволяющий абсолютно по-новому взглянуть на процесс разработки печатных форм. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и "прозрачность" разработки, а также навести порядок в многообразии корпоративных печатных форм.

18000 15300 руб.

06.10.2023    7252    21    6    

39

SALE! 20%

Infostart УДиФ: Управление данными и формами

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

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

10000 8000 руб.

10.11.2023    3490    11    1    

33

SALE! 30%

PowerTools

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

Универсальный инструмент программиста для администрирования конфигураций. Сборник наиболее часто используемых обработок под единым интерфейсом.

3600 2520 руб.

14.01.2013    177713    1073    0    

848

Многопоточность. Универсальный «Менеджер потоков» 2.1

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

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

5000 руб.

07.02.2018    99330    239    97    

296

[ЕХТ] Фреймворк для Расширений 1С

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

"Фреймворк для Расширений 1С" это универсальное и многофункциональное решение, упрощающее разработку и поддержку создаваемых Расширений. Поставляется в виде комплекта из нескольких Расширений с открытым исходным кодом. Работает в любых Конфигурациях в режиме Управляемого приложения с режимом совместимости 8.3.12 и выше без необходимости внесения изменений в Конфигурацию.

3000 руб.

27.08.2019    18095    6    8    

39

1С HTML Шаблоны / HTML Templates

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

Быстрая и удобная обработка для работы с шаблонами HTML. Позволяет легко и быстро формировать код HTML.

2040 руб.

27.12.2017    28078    3    10    

14

Выполнение произвольного кода или запроса с параметрами через Web-сервис (замена COM-подключений)

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

В процессе работы в 1С часто возникает потребность получить данные из другой базы.  Обычно это делается через COM-соединение, и время выполнения запроса при этом оставляет желать лучшего. В данной публикации представлено универсальное решение, позволяющее практически моментально выполнить произвольный код или запрос с параметрами в другой информационной базе через Web-сервис.

2400 руб.

24.09.2019    23589    15    15    

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

//Экранирует недопустимые символы
Функция Экранировать(Стр)
	Х=СтрЗаменить(Стр,"""","\""");
	//Х=СтрЗаменить(Х,"'","\'"); //??? Не уверен в этой строке. Кто нибудь может подтвердить или опровергнуть нужность этой строки.
	Х=СтрЗаменить(Х,"\","\\");
	Х=СтрЗаменить(Х,"/","\/"); //Тут тоже не уверен, но пока оставлю.
	Х=СтрЗаменить(Х,Символ(8),"\\b");
	Х=СтрЗаменить(Х,Символы.ПФ,"\\f");
	Х=СтрЗаменить(Х,Символы.ПС,"\\n");
	Х=СтрЗаменить(Х,Символы.ВК,"\\r");
	Х=СтрЗаменить(Х,Символы.Таб,"\\t");
	Х=СтрЗаменить(Х,Символы.ВТаб,"\\v");
	Возврат Х
КонецФункции
Показать
45. BigB 191 25.11.15 16:18 Сейчас в теме
(44) Поручик, сайт покоцал код. Не понял, что вы изменили?
9. BigB 191 27.11.09 08:23 Сейчас в теме
Извините, но новая версия. Что нового: в строках можно использовать, как двойные, так и одинарные кавычки и исправлен маленький косячок при парсинге объекта.
10. terris 02.12.09 02:01 Сейчас в теме
Спасибо. Давно искал парсер для 1С.
11. d.snissarenko 152 06.01.11 20:37 Сейчас в теме
12. parallel588 07.09.11 11:00 Сейчас в теме
13. ctulhua 29.09.11 13:01 Сейчас в теме
Все отлично, пара мелких глюков, элементарно исправляемых и можно лететь в космос)
14. BigB 191 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 34 04.06.14 09:41 Сейчас в теме
(17) spacedragon, а как именно перезаписывали? подозреваю, что у меня именно в этом ошибка.

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

Запрос.УстановитьТелоИзДвоичныхДанных(Новый ДвоичныеДанные(ИмяФайлаЗапроса));
Ответ = Соединение.ОтправитьДляОбработки(Запрос);
27. BigB 191 04.06.14 10:27 Сейчас в теме
(26) xzorkiix, покажите код побольше или прикрепите свою обработку к сообщению. Может чем и помогу.
28. xzorkiix 34 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 191 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 72 18.04.13 15:34 Сейчас в теме
Не получается отправляю этим парсером картинки закодированные в base64 (
23. Elisy 948 11.06.13 20:16 Сейчас в теме
Добрый день,
попытался воспользоваться JSON-сериализацией.
Есть 2 момента.
1. Сериализация двойных кавычек в строке у вас переводится в \\" (т.е. с лишним обратным слешем)
2. Думаю, что сериализацию типа Ссылка лучше сделать в виде идентификатора. Сейчас Ссылка сериализуется в Наименование.
Спасибо
24. slavik27 88 20.06.13 06:41 Сейчас в теме
Спасибо, вещь интересная
25. Alexandr671 05.09.13 11:00 Сейчас в теме
А где файлик то???
$m сняли а фалик не дали???
29. Serg3141 11 02.08.14 00:41 Сейчас в теме
Супер, сэкономил себе кучу времени, спасибо большое
30. BigB 191 04.08.14 06:22 Сейчас в теме
(29)Да пожалуйста. Пользуйтесь на здоровье :)
31. Serg3141 11 08.08.14 18:21 Сейчас в теме
В работе с этим ПО наткнулся на такую вещь. Удаленный сервер по запросу выдавал строку json, в которой использовались индексы, по своему написанию полностью соответствующие УИД в 1С. При загрузке ПО переводило эти индексы в УИД 1С. Но дело в том, что в моей ситуации это были индексы, а не УИД и этот удаленный сервер (сторонние разработчики) выдавал их в верхнем регистре. После преобразования индексов в УИД строковое написание УИД становилось в маленьком регистре, соответственно связь по индексам терялась. Может стоит ввести некий настроечный параметр, что-то вроде этого "ПреобразовыватьСтроковоеПредставлениеУИД=Истина", чтобы можно было избежать таких казусов, а кому нужно как установить параметр, тот так и установит.
32. BigB 191 08.08.14 21:09 Сейчас в теме
(31)Можете пример показать?
33. Serg3141 11 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 191 11.08.14 09:26 Сейчас в теме
(33)Функция UnJson с УИДами не работает. Они для неё являются простыми строками.
После преобразования индексов в УИД строковое написание УИД становилось в маленьком регистре

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

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

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


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

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

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