|
|
|
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":"Вася, Петя",- падает с ошибкой, т.к. удаляет кавычки и потом считает, что значение поля "Вася" |
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |