Имя: Пароль:
1C
1C 7.7
v7: JSON и 1С7.7
0 Sam1C
 
05.05.17
13:14
Всем Привет! Может есть у кого готовый вариант получения из JSON в 1С , или какая внешняя компонента для работы с форматом JSON в связке с 1С.
Нашел тут: http://catalog.mista.ru/public/252791/
Хотел посмотреть, но денег просят(
1 Ц_У
 
05.05.17
13:18
Гугл может все, что угодно...
https://github.com/r72cccp/1C77_JSON_parser
2 Смотрящий
 
05.05.17
13:18
(0) Дорж денег проsит или аvтор ?
3 Sam1C
 
05.05.17
13:43
(2) Что такое Дорж?
4 ADirks
 
05.05.17
13:45
этого добра кругом навалом
например



Процедура JSON_Init()
    Если JSON_ctrl <> Неопределено Тогда
        Возврат;
    КонецЕсли;
    
    JSON_ctrl = СоздатьОбъект("MSScriptControl.ScriptControl");
    JSON_ctrl.Language = "jscript";
    код = "
    |
    | function parseJSON(strJSON) {
    | var tmpFunc = (new Function('return('+strJSON+');'))();
    | return(tmpFunc);
    | }
    |
    | // Получить элемент массива
    | function aGet(Array, index) {
    | return(Array[index]);
    | }
    |
    | // Получить ключ пары по индексу
    | function oKey(Obj, index) {
    | var size = 0, key;
    | for (key in Obj) {
    | if (size == index) break;
    | if (Obj.hasOwnProperty(key)) size++;
    | }
    | return(key);
    | }
    |
    | // Получить значение пары по ключу
    | function oValueByKey(Obj, key) {
    | return(Obj[key]);
    | }
    |
    | //Получить количество пар в объекте
    | Object.size = function(obj) {
    | var size = 0, key;
    | for (key in obj) {
    | if (obj.hasOwnProperty(key)) size++;
    | }
    | return(size);
    | }
    |
    | //Получить размер объекта (количество пар в нём)
    | function oSize(Obj) {
    | return(Object.size(Obj));
    | }
    |
    | // Получить тип объекта (number, string, object, array)
    | function eType(Element) {
    | if (Element instanceof Array) {
    | return(""array"");
    | } else if (Object.prototype.toString.call(Element) === '[object Array]') {
    | return(""array"");
    | } else {
    | return(typeof(Element));
    | }
    | }
    |";
    JSON_ctrl.AddCode(код);
КонецПроцедуры

Функция jsonВСписок(obj)
    //Сообщить(JSON_ctrl.run("oSize", obj)); //Размер объекта (количество пар ключ-значение)
    //Сообщить(JSON_ctrl.run("oKey", obj, 1)); //Ключ пары с номером 1
    //Сообщить(JSON_ctrl.run("oValueByKey", obj, "id")); //Получить значение объекта по ключу
    //Сообщить(JSON_ctrl.run("aGet", obj.products, 0).id); //Получить Элемент массива с индексом 0
    //Сообщить(JSON_ctrl.run("eType", obj.products)); //Получить тип объекта, даже если он - массив

    сп = СоздатьОбъект("СписокЗначений");
    ТипОбъекта = JSON_ctrl.run("eType", obj);
    Если ТипОбъекта = "object" Тогда
        Для н = 0 По JSON_ctrl.run("oSize", obj) - 1 Цикл
            Ключ = JSON_ctrl.run("oKey", obj, н);
            Значение = JSON_ctrl.run("oValueByKey", obj, Ключ);
            ТипЗнач = JSON_ctrl.run("eType", Значение);
            Если Найти("number, string", ТипЗнач) > 0 Тогда
                сп.ДобавитьЗначение(Значение, Ключ);
            ИначеЕсли Найти("object, array", ТипЗнач) > 0 Тогда
                сп.ДобавитьЗначение(jsonВСписок(Значение), Ключ);
            КонецЕсли;
        КонецЦикла;
    ИначеЕсли ТипОбъекта = "array" Тогда
        Для н = 0 По obj.length - 1 Цикл
            Значение = JSON_ctrl.run("aGet", obj, н);
            ТипЗнач = JSON_ctrl.run("eType", Значение);
            Если Найти("number, string", ТипЗнач) > 0 Тогда
                сп.ДобавитьЗначение(Значение, СокрЛП(Строка(н)));
            ИначеЕсли Найти("object, array", ТипЗнач) > 0 Тогда
                сп.ДобавитьЗначение(jsonВСписок(Значение), СокрЛП(Строка(н)));
            КонецЕсли;
        КонецЦикла;
    КонецЕсли;
    Возврат сп;
КонецФункции


Функция сз_FromJSON(стр) Экспорт
    JSON_Init();
    
    obj = JSON_ctrl.run("parseJSON", стр); //Работает
    сз = jsonВСписок(obj);
    
    Возврат сз;
КонецФункции
5 Sam1C
 
05.05.17
13:46
(1) Спасибо, но это не эта обработка:http://catalog.mista.ru/public/252791/

Там в описание: Результатом работы является индексированнная таблица (см. 1С++ ИндексированнаяТаблица )
а в этом список значений
6 ADirks
 
05.05.17
13:47
переделай, ётить
Программист всегда исправляет последнюю ошибку.