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
509
509 Скачать (1 SM) Купить за 1 850 руб.

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

См. также

SALE! 15%

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

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

10000 руб.

02.09.2020    159453    874    399    

861

SALE! 15%

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

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

8400 7140 руб.

20.08.2024    7777    57    22    

66

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

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

9360 руб.

17.05.2024    23439    68    45    

117

SALE! 15%

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

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

10000 8500 руб.

10.11.2023    10431    36    24    

61

SALE! 15%

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

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

22200 19980 руб.

06.10.2023    15403    35    7    

70

SALE! 35%

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

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

4800 3120 руб.

14.01.2013    187988    1140    0    

912

SALE! 15%

Инструментарий разработчика Программист 8.3.14 1С:Конвертация данных Россия Платные (руб)

Расширение для конфигурации “Конвертация данных 3”. Добавляет подсветку синтаксиса, детальную контекстную подсказку, глобальный поиск по коду.

15000 12750 руб.

07.10.2021    17303    6    32    

42

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

Менеджер конфигураций 1С — альтернативный стартер информационных баз 1С:Предприятие.

1800 руб.

21.02.2023    7696    8    35    

23
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. so-quest 140 20.11.09 13:55 Сейчас в теме
Авансом. Ибо не смотрел.
2. Evg-Lylyk 4841 20.11.09 14:27 Сейчас в теме
Привел бы реальный полезный пример допустим парсинг текста запроса
3. BigB 193 20.11.09 14:56 Сейчас в теме
(2) Если честно - то я не понял ваш вопрос. Как можно, а главное для чего нужно парсить текст запроса? Если не сложно уточните по подробнее
4. Evg-Lylyk 4841 20.11.09 18:17 Сейчас в теме
(3) Ну например для контекстной подсказки в запросе.
Ну если парсить ну что нить приближенное к 1С можно Текст встроенного языка
5. WKBAPKA 215 22.11.09 12:47 Сейчас в теме
2(2): а чего его парсить то? парсить несложно, а вот все что дальше делать с результатом парсинга уже посложнее...
6. Evg-Lylyk 4841 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. Поручик 4692 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 152 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 951 11.06.13 20:16 Сейчас в теме
Добрый день,
попытался воспользоваться JSON-сериализацией.
Есть 2 момента.
1. Сериализация двойных кавычек в строке у вас переводится в \\" (т.е. с лишним обратным слешем)
2. Думаю, что сериализацию типа Ссылка лучше сделать в виде идентификатора. Сейчас Ссылка сериализуется в Наименование.
Спасибо
24. slavik27 101 20.06.13 06:41 Сейчас в теме
Спасибо, вещь интересная
25. Alexandr671 05.09.13 11:00 Сейчас в теме
А где файлик то???
$m сняли а фалик не дали???
29. Serg3141 12 02.08.14 00:41 Сейчас в теме
Супер, сэкономил себе кучу времени, спасибо большое
30. BigB 193 04.08.14 06:22 Сейчас в теме
(29)Да пожалуйста. Пользуйтесь на здоровье :)
31. Serg3141 12 08.08.14 18:21 Сейчас в теме
В работе с этим ПО наткнулся на такую вещь. Удаленный сервер по запросу выдавал строку json, в которой использовались индексы, по своему написанию полностью соответствующие УИД в 1С. При загрузке ПО переводило эти индексы в УИД 1С. Но дело в том, что в моей ситуации это были индексы, а не УИД и этот удаленный сервер (сторонние разработчики) выдавал их в верхнем регистре. После преобразования индексов в УИД строковое написание УИД становилось в маленьком регистре, соответственно связь по индексам терялась. Может стоит ввести некий настроечный параметр, что-то вроде этого "ПреобразовыватьСтроковоеПредставлениеУИД=Истина", чтобы можно было избежать таких казусов, а кому нужно как установить параметр, тот так и установит.
32. BigB 193 08.08.14 21:09 Сейчас в теме
(31)Можете пример показать?
33. Serg3141 12 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 12 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 4975 14.10.14 12:35 Сейчас в теме
Спасибо за обработку. Срочно понадобился JSON.
Просто подключается, все корректно распознает.
40. stanru1 91 28.10.14 18:03 Сейчас в теме
Спасибо большое! В ожидании реализации от 1С вы сэкономили мне кучу времени :-)
41. Elisy 951 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 677 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 1906 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 1906 24.07.17 19:21 Сейчас в теме
(52)
Значение=ПрочитатьJSON(ЧтениеJSON);

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