|
Json в структуру без ЧтениеJSON Bibr, John D, Shurjk, Михаил Козлов, Волшебник, DiMel_77, АнализДанных, Страждущий, ads55, asady, KJlag, Галахад, Gucci76, NikeArz, Timon1405, arsik, butterbean, BlottoYolo, piter3, Builder, Гипервизор, DimVad, Мультук, maxar, timurhv, _Batoo, ReaLg, boozin, privetik, ass1c, Prog_man, dmt, formista2000, orakool
| ☑ | ||
---|---|---|---|---|
0
Bibr
20.02.25
✎
16:27
|
8.2, поднимать релиз не судьба, ЧтениеJSON нету
может есть у кого под рукой функция, которая ручками разбирает json в структуру? Попробовал разные Ии-шки - все выдали умный, но нерабочий текст. |
|||
1
asady
20.02.25
✎
16:36
|
(0) поиском научись пользоваться и пользуйся
https://chel1c.ru/from_json_to_1c/?ysclid=m7ddu5g4yc140428768 |
|||
2
DiMel_77
20.02.25
✎
16:37
|
(0) В старые добрые времена до выхода 8.3.6 где реализовали работу с Json люди пользовались https://infostart.ru/1c/tools/119601/
|
|||
3
NikeArz
20.02.25
✎
16:59
|
ЗаполнитьДанныеИзОтветаJSONПроцедура ЗаполнитьДанныеИзОтветаJSON(Результат, ТекстJSON, ТипДанных) ТекстJSON = СокрЛП(Сред(ТекстJSON, 2)); НомерЗначения = 0; Пока ТекстJSON <> "" Цикл ПервыйСимвол = Лев(ТекстJSON, 1); Если ПервыйСимвол = "{" Тогда Значение = Новый Структура; ЗаполнитьДанныеИзОтветаJSON(Значение, ТекстJSON, "Структура"); Если ТипДанных = "Структура" Тогда Результат.Вставить("Значение" + ?(НомерЗначения = 0, "", НомерЗначения), Значение); НомерЗначения = НомерЗначения + 1; ИначеЕсли ТипДанных = "Массив" Тогда Результат.Добавить(Значение); КонецЕсли; ИначеЕсли ПервыйСимвол = "[" Тогда Значение = Новый Массив; ЗаполнитьДанныеИзОтветаJSON(Значение, ТекстJSON, "Массив"); Если ТипДанных = "Структура" Тогда Результат.Вставить("Значение" + ?(НомерЗначения = 0, "", НомерЗначения), Значение); НомерЗначения = НомерЗначения + 1; Иначе Результат.Добавить(Значение); КонецЕсли; ИначеЕсли ПервыйСимвол = "}" И ТипДанных = "Структура" Тогда ТекстJSON = СокрЛП(Сред(ТекстJSON, 2)); Если Лев(ТекстJSON, 1) = "," Тогда ТекстJSON = СокрЛП(Сред(ТекстJSON, 2)); КонецЕсли; Возврат; ИначеЕсли ПервыйСимвол = "]" И ТипДанных = "Массив" Тогда ТекстJSON = СокрЛП(Сред(ТекстJSON, 2)); Если Лев(ТекстJSON, 1) = "," Тогда ТекстJSON = СокрЛП(Сред(ТекстJSON, 2)); КонецЕсли; Возврат; ИначеЕсли ПервыйСимвол = "}" И ТипДанных = "Массив" Тогда ТекстJSON = СокрЛП(Сред(ТекстJSON, 2)); Если Лев(ТекстJSON, 1) = "," Тогда ТекстJSON = СокрЛП(Сред(ТекстJSON, 2)); КонецЕсли; Возврат; Иначе Если ТипДанных = "Структура" Тогда Поз = Найти(ТекстJSON, ":"); Если Поз = 0 Тогда Прервать; КонецЕсли; ИмяЗначения = СокрЛП(Лев(ТекстJSON, Поз-1)); ТекстJSON = СокрЛП(Сред(ТекстJSON, Поз+1)); Если Лев(ТекстJSON, 1) = "{" Тогда Значение = Новый Структура; ЗаполнитьДанныеИзОтветаJSON(Значение, ТекстJSON, "Структура"); ИначеЕсли Лев(ТекстJSON, 1) = "[" Тогда Значение = Новый Массив; ЗаполнитьДанныеИзОтветаJSON(Значение, ТекстJSON, "Массив"); Иначе Поз = 0; Для Сч = 1 По СтрДлина(ТекстJSON) Цикл Символ = Сред(ТекстJSON, Сч, 1); Если Символ = "," ИЛИ Символ = "]" ИЛИ Символ = "}" Тогда Поз = Сч; Прервать; КонецЕсли; КонецЦикла; Если Поз = 0 Тогда Значение = ТекстJSON; ТекстJSON = ""; Иначе Значение = Лев(ТекстJSON, Поз-1); ТекстJSON = СокрЛП(Сред(ТекстJSON, Поз + ?(Сред(ТекстJSON, Поз, 1) = ",", 1, 0))); КонецЕсли; Значение = СокрЛП(Значение); КонецЕсли; Результат.Вставить(ИмяЗначения, Значение); ИначеЕсли ТипДанных = "Массив" Тогда Поз = 0; Для Сч = 1 По СтрДлина(ТекстJSON) Цикл Символ = Сред(ТекстJSON, Сч, 1); Если Символ = "," ИЛИ Символ = "]" ИЛИ Символ = "}" Тогда Поз = Сч; Прервать; КонецЕсли; КонецЦикла; Если Поз = 0 Тогда Значение = ТекстJSON; ТекстJSON = ""; Иначе Значение = Лев(ТекстJSON, Поз-1); ТекстJSON = СокрЛП(Сред(ТекстJSON, Поз + ?(Сред(ТекстJSON, Поз, 1) = ",", 1, 0))); КонецЕсли; Значение = СокрЛП(Значение); Результат.Добавить(Значение); КонецЕсли; КонецЕсли; КонецЦикла; КонецПроцедуры Функция ЗаполнитьСтруктуруИзОтветаJSON(Знач ТекстJSON) Экспорт Результат = Новый Структура; ТекстJSON = СтрЗаменить(ТекстJSON, "\""", """"); ТекстJSON = СтрЗаменить(ТекстJSON, """", ""); Если Лев(ТекстJSON, 1) = "{" Тогда ЗаполнитьДанныеИзОтветаJSON(Результат, ТекстJSON, "Структура"); ИначеЕсли Лев(ТекстJSON, 1) = "[" Тогда МассивДанных = Новый Массив; ЗаполнитьДанныеИзОтветаJSON(МассивДанных, ТекстJSON, "Массив"); Результат.Вставить("Значение", МассивДанных); КонецЕсли; Возврат Результат; КонецФункции |
|||
4
Галахад
гуру
20.02.25
✎
16:42
|
(2) Он же на гите https://github.com/legionwfz/1C-JSON
|
|||
5
Bibr
20.02.25
✎
16:45
|
Спасибо всем!
(1) а научи. я вот гуглил по "1с json в структуру" и твоя ссылка только в конце 4й страницы. Для интереса ввёл в поисковик прям заголовок страницы "Импорт из JSON в 1С". И твоя ссылка только на второй странице. Что я делаю не так? |
|||
6
Галахад
гуру
20.02.25
✎
16:51
|
(5) Парсер же.
|
|||
7
asady
20.02.25
✎
16:55
|
(5) у меня на 2-й странице но самая верхняя
|
|||
8
Bibr
20.02.25
✎
16:58
|
(7) ага, я про то же. по идеально точному запросу только вторая страница
|
|||
9
Bibr
20.02.25
✎
17:04
|
(1)(2)
кстати тоже не идеал, надо допиливать. функция предварительно грохает в json все кавычки и потом работает через запятые. в результате если есть значения формата "names":"Вася, Петя",- падает с ошибкой, т.к. удаляет кавычки и потом считает, что значение поля "Вася" |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |