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

Опубликовал BigB в раздел Программирование - Практика программирования

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

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

Файлы

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

См. также

Лучшие комментарии

8. BigB (файл скачал) 26.11.2009 07:37
Полностью обезглючил парсер. Пользуйтесь на здоровье.
Ответили: (44)
# Ответить
29. Serg3141 02.08.2014 00:41
Супер, сэкономил себе кучу времени, спасибо большое
Ответили: (30)
+ 1 [ BigB; ]
# Ответить
24. slavik27 (файл скачал) 20.06.2013 06:41
Спасибо, вещь интересная
+ 1 [ BigB; ]
# Ответить

Комментарии

1. so-quest (файл скачал) 20.11.2009 13:55
Авансом. Ибо не смотрел.
# Ответить
2. Evg-Lylyk 20.11.2009 14:27
Привел бы реальный полезный пример допустим парсинг текста запроса
Ответили: (5) (3)
# Ответить
3. BigB (файл скачал) 20.11.2009 14:56
(2) Если честно - то я не понял ваш вопрос. Как можно, а главное для чего нужно парсить текст запроса? Если не сложно уточните по подробнее
Ответили: (4)
# Ответить
4. Evg-Lylyk 20.11.2009 18:17
(3) Ну например для контекстной подсказки в запросе.
Ну если парсить ну что нить приближенное к 1С можно Текст встроенного языка
# Ответить
5. WKBAPKA 22.11.2009 12:47
2(2): а чего его парсить то? парсить несложно, а вот все что дальше делать с результатом парсинга уже посложнее...
Ответили: (6)
# Ответить
6. Evg-Lylyk 22.11.2009 13:09
(5) Хотел сказать что желательно пример по теме 1С
Ответили: (7)
# Ответить
7. BigB (файл скачал) 23.11.2009 07:09
(6) формат передачи json удобно использовать в связке с JavaScript. В самой 1С его нет смысла использовать.
# Ответить
8. BigB (файл скачал) 26.11.2009 07:37
Полностью обезглючил парсер. Пользуйтесь на здоровье.
Ответили: (44)
# Ответить
9. BigB (файл скачал) 27.11.2009 08:23
Извините, но новая версия. Что нового: в строках можно использовать, как двойные, так и одинарные кавычки и исправлен маленький косячок при парсинге объекта.
# Ответить
10. terris (файл скачал) 02.12.2009 02:01
Спасибо. Давно искал парсер для 1С.
# Ответить
11. d.snissarenko (файл скачал) 06.01.2011 20:37
Супер, спасибо, помогло с сервисами от http://developers.cloudmade.com/projects/web-maps-api/examples/geocoding
# Ответить
12. parallel588 (файл скачал) 07.09.2011 11:00
Супер
# Ответить
13. ctulhua (файл скачал) 29.09.2011 13:01
Все отлично, пара мелких глюков, элементарно исправляемых и можно лететь в космос)
Ответили: (14)
# Ответить
14. BigB (файл скачал) 04.10.2011 12:02
(13) ctulhua, какие именно глюки?
# Ответить
15. Ortos (файл скачал) 21.01.2012 12:26
Пригодилось! Спасибо!
# Ответить
16. BigShmax 15.02.2012 12:12
Хмм мне принесли инструкцию API для автоматизации закзов в интернет магазине фирмы КАЛИТА про жалюзи. мне этот парсер ни как не может быть полезен? я вообще не знаю с какой стороны подойти к поставленной задаче :-( нужно из заказа покупателей жалюзи заказать при помощи этого чудо JSON о котором я услышал в первые 10 митнут назад :-(
# Ответить
17. spacedragon (файл скачал) 03.03.2012 17:54
При работе с ВЕБ сервисом, который принимает запросы в JSON и отвечает также всплыла интересная ситуация. Стандратный РНР парсер не понимает строку из 1С из-за символа BOM (Символ.НПП). Пришлось в запросе НТТР.POST предварительно перезаписывать файл для того, чтобы убрать первые 3 невидимых символа. Кто нибудь такое встречал? Ваш парсер такую ситуацию как то обыграет?
Ответили: (26)
# Ответить
18. spacedragon (файл скачал) 03.03.2012 18:32
спасибо за код
Ответили: (19)
# Ответить
19. BigB (файл скачал) 05.03.2012 09:17
(18) spacedragon, пожалуйста.
# Ответить
20. artemkab@yandex.ru 10.04.2012 02:27
Вещица очень кстати, пробую ))
# Ответить
21. buzzzard (файл скачал) 28.04.2012 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 18.04.2013 15:34
Не получается отправляю этим парсером картинки закодированные в base64 (
# Ответить
23. Elisy (файл скачал) 11.06.2013 20:16
Добрый день,
попытался воспользоваться JSON-сериализацией.
Есть 2 момента.
1. Сериализация двойных кавычек в строке у вас переводится в \\" (т.е. с лишним обратным слешем)
2. Думаю, что сериализацию типа Ссылка лучше сделать в виде идентификатора. Сейчас Ссылка сериализуется в Наименование.
Спасибо
# Ответить
24. slavik27 (файл скачал) 20.06.2013 06:41
Спасибо, вещь интересная
+ 1 [ BigB; ]
# Ответить
25. Alexandr671 (файл скачал) 05.09.2013 11:00
А где файлик то???
$m сняли а фалик не дали???
# Ответить
26. xzorkiix 04.06.2014 09:41
(17) spacedragon, а как именно перезаписывали? подозреваю, что у меня именно в этом ошибка.

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

Запрос.УстановитьТелоИзДвоичныхДанных(Новый ДвоичныеДанные(ИмяФайлаЗапроса));
Ответ = Соединение.ОтправитьДляОбработки(Запрос);
...Показать Скрыть
Ответили: (27)
# Ответить
27. BigB (файл скачал) 04.06.2014 10:27
(26) xzorkiix, покажите код побольше или прикрепите свою обработку к сообщению. Может чем и помогу.
Ответили: (28)
# Ответить
28. xzorkiix 05.06.2014 17:00
(27) BigB, разобрался (в 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);
ДанныеНаЗапись.Записать(полноеИмяФайла); // записываем

КонецФункции
# Ответить
29. Serg3141 02.08.2014 00:41
Супер, сэкономил себе кучу времени, спасибо большое
Ответили: (30)
+ 1 [ BigB; ]
# Ответить
30. BigB (файл скачал) 04.08.2014 06:22
(29)Да пожалуйста. Пользуйтесь на здоровье :)
# Ответить
31. Serg3141 08.08.2014 18:21
В работе с этим ПО наткнулся на такую вещь. Удаленный сервер по запросу выдавал строку json, в которой использовались индексы, по своему написанию полностью соответствующие УИД в 1С. При загрузке ПО переводило эти индексы в УИД 1С. Но дело в том, что в моей ситуации это были индексы, а не УИД и этот удаленный сервер (сторонние разработчики) выдавал их в верхнем регистре. После преобразования индексов в УИД строковое написание УИД становилось в маленьком регистре, соответственно связь по индексам терялась. Может стоит ввести некий настроечный параметр, что-то вроде этого "ПреобразовыватьСтроковоеПредставлениеУИД=Истина", чтобы можно было избежать таких казусов, а кому нужно как установить параметр, тот так и установит.
Ответили: (32)
# Ответить
32. BigB (файл скачал) 08.08.2014 21:09
(31)Можете пример показать?
# Ответить
33. Serg3141 10.08.2014 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)
# Ответить
34. BigB (файл скачал) 11.08.2014 09:26
(33)Функция UnJson с УИДами не работает. Они для неё являются простыми строками.
После преобразования индексов в УИД строковое написание УИД становилось в маленьком регистре

Кто мешает воспользоваться функцией ВРег?
# Ответить
35. Serg3141 12.08.2014 11:12
(34) мешает то, что разработчик не гарантирует, что те самые последовательности символов останутся в верхнем регистре при смене ПО (а у них периодически это происходит). Да для себя я проблем не вижу - там УИД точно передаваться не будет, так что я просто закомментировал преобразование в УИД, и все. Я просто подумал, что следует такую, возможно и мелочь, подсказать. Я из-за нее потратил время, пока разобрался, что у меня регистр меняется.
# Ответить
36. BigB (файл скачал) 08.10.2014 08:59
УРА! СВЕРШИЛОСЬ!
В платформе 8.3.6 будет встроенный JSON!
Средства работы с JSON из Зазеркалья
Осталось дождаться выхода платформы.
Ответили: (38)
+ 1 [ xzorkiix; ]
# Ответить
37. ekaruk (файл скачал) 14.10.2014 12:35
Спасибо за обработку. Срочно понадобился JSON.
Просто подключается, все корректно распознает.
+ 1 [ BigB; ]
# Ответить
38. xzorkiix 15.10.2014 10:21
(36) BigB, пришел увидеть здесь именно этот комментарий :)
Ответили: (39)
# Ответить
39. BigB (файл скачал) 15.10.2014 11:40
(38) Я просил их об этом ещё в 2009 году http://devtrainingforum.v8.1c.ru/forum/thread.jsp?id=547702#547702
+ 1 [ Rustig; ]
# Ответить
40. stanru1 (файл скачал) 28.10.2014 18:03
Спасибо большое! В ожидании реализации от 1С вы сэкономили мне кучу времени :-)
# Ответить
41. Elisy (файл скачал) 28.11.2014 08:03
По скорости, если кому-то интересно. Сериализация Json работает очень медленно по сравнению с XML-сериализацией.
Оптимизация делалась для веб-сайта http://www.oboi.kg
На данных из примерно 5 тысяч записей таблицы значений перевод в XML уменьшил время обработки со 120 секунд (2 минуты) до 4 секунд.
Ответили: (42)
# Ответить
42. BigB (файл скачал) 29.11.2014 23:03
(41) Конечно же скорость сериализации в XML будет быстрее, потому что она делается средствами платформы. Сериализация же в json делается средствами языка.
В платформе 8.3.6 сериализация в json то же будет средствами платформы. Я полагаю, что скорость будет не хуже, а может быть, даже лучше чем при сериализации в XML.
# Ответить
43. Patriot1S 29.04.2015 12:24
В Функции ПолучитьЗначениеJSON( я бы изменил строку

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

Для совместимости со встроенным JSON 8.3.Хотя понимаю, что скорость работы упадет.
# Ответить
44. Поручик (файл скачал) 25.11.2015 15:36
Функцию Экранировать тоже пришлось пофиксить, иначе декодирование на php json_decode падает с ошибкой. Смысл фикса в добавлении дополнительного слэша \ к спецсимволам.

//Экранирует недопустимые символы
Функция Экранировать(Стр)
	Х=СтрЗаменить(Стр,"""","\""");
	//Х=СтрЗаменить(Х,"'","\'"); //??? Не уверен в этой строке. Кто нибудь может подтвердить или опровергнуть нужность этой строки.
	Х=СтрЗаменить(Х,"\","\\");
	Х=СтрЗаменить(Х,"/","\/"); //Тут тоже не уверен, но пока оставлю.
	Х=СтрЗаменить(Х,Символ(8),"\\b");
	Х=СтрЗаменить(Х,Символы.ПФ,"\\f");
	Х=СтрЗаменить(Х,Символы.ПС,"\\n");
	Х=СтрЗаменить(Х,Символы.ВК,"\\r");
	Х=СтрЗаменить(Х,Символы.Таб,"\\t");
	Х=СтрЗаменить(Х,Символы.ВТаб,"\\v");
	Возврат Х
КонецФункции
...Показать Скрыть
Ответили: (45)
# Ответить
45. BigB (файл скачал) 25.11.2015 16:18
(44) Поручик, сайт покоцал код. Не понял, что вы изменили?
# Ответить
46. sikuda (файл скачал) 21.01.2016 15:37
Х=СтрЗаменить(Стр,"""","\""");
и потом 
Х=СтрЗаменить(Х,"\","\\");


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

Исправил
 
Х=СтрЗаменить(Х,"\","\\");
//Х=СтрЗаменить(Х,"'","\'"); //убрать точно
Х=СтрЗаменить(Стр,"""","\""");
...Показать Скрыть
Ответили: (47)
+ 1 [ BigB; ]
# Ответить
47. BigB (файл скачал) 23.01.2016 19:25
(46) согласен.
# Ответить
Внимание! За постинг в данном форуме $m не начисляются.
Внимание! Для написания сообщения необходимо авторизоваться
Текст сообщения*
Прикрепить файл






IE 2016