JSON в таблицу

bizzon

Client
Регистрация
08.09.2015
Сообщения
1 101
Благодарностей
132
Баллы
63
Как должно быть прописано в свойствах, чтобы сделать выборку всех значений в таблицу?
Если пишу конкретные цифры индекса массивов, то функция отлично отрабатывает данные в одну строку таблицы.
Если пишу без индексов, например,
, то программа пишет:
Выполнение действия ToTable Json/Xml No such name: extra Имя параметра: name



77.png
 
Последнее редактирование:

spesy

Активный пользователь
Регистрация
08.08.2016
Сообщения
161
Благодарностей
168
Баллы
43

bizzon

Client
Регистрация
08.09.2015
Сообщения
1 101
Благодарностей
132
Баллы
63

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 794
Благодарностей
2 466
Баллы
113
Чтобы ответить на такой вопрос, нужно понять изначально что вообще Вы хотите сохранить в табличку.
Чтобы построить такой JSON, как на Вашем скриншоте, нужно использовать примерно такой код (или какой-то другой, но это не важно, важно понять сам принцип).
У нас есть какие-то определенные данные, которые сгрупированы в массивы.
C#:
// Изначально у нас есть объект, содержащий массив объектов с определенными полями
var extra = new { 
    extra = new[] { 
        new {option_group = "1", url = "site3.ru"}, 
        new {option_group = "2", url = "site2.ru"}, 
        new {option_group = "3", url = "site1.ru"}
    }
};

// Дальше мы имеем массив объектов, содержащих массивы объектов
var mockups = new { mockups = 
    new[] { 
        extra, 
        extra, 
        extra 
    }
};

// И в конце, все эти данные - это оказывается один объект
var result = new{ result = mockups };
string json = Global.ZennoLab.Json.JsonConvert.SerializeObject(result); // Превращаем в JSON
project.Json.FromString(json); // Заносим в переменные Зеннопостера
52824



А уже отталкиваясь от этого, мы должны определиться, что мы хотим сохранить.
Один из вариантов:
C#:
// Изначально у нас есть объект, содержащий массив объектов с определенными полями
var extra = new { 
    extra = new[] { 
        new {option_group = "1", url = "site3.ru"}, 
        new {option_group = "2", url = "site2.ru"}, 
        new {option_group = "3", url = "site1.ru"}
    }
};

// Дальше мы имеем массив объектов, содержащих массивы объектов
var mockups = new { mockups = 
    new[] { 
        extra, 
        extra, 
        extra 
    }
};

// И в конце, все эти данные - это оказывается один объект
var result = new{ result = mockups };
string json = Global.ZennoLab.Json.JsonConvert.SerializeObject(result); // Превращаем в JSON
project.Json.FromString(json); // Заносим в переменные Зеннопостера

IZennoTable tb1 = project.Tables["Таблица 1"];
// Сколько всего массивов mockups в result
int count_mockups = project.Json.result.mockups.Count;
if(count_mockups > 0) {
    project.SendInfoToLog("Есть массивы mockups", true);
    for(int i=0;i<count_mockups;i++) {
        project.SendInfoToLog(string.Format(@"Взяли в работу {0} массив mockups", i), true);
        int count_extra = project.Json.result.mockups[i].extra.Count;
        project.SendInfoToLog(string.Format(@"{0} массив mockups содержит {1} массивов extra", i, count_extra), true);        
        if(count_extra > 0) {
            for(int j=0; j < count_extra; j++) {
                project.SendInfoToLog(string.Format(@"С {0} массива mockups берем элемент {1}", i, j), true);
                string option_group = string.Empty;
                try {
                    project.SendInfoToLog(string.Format(@"{0} массив mockups {1} extra содержит option_group", i, j), true);
                    option_group = project.Json.result.mockups[i].extra[j].option_group;
                }
                catch {
                    project.SendInfoToLog(string.Format(@"{0} массив mockups {1} extra НЕ содержит option_group", i, j), true);
                
                }
                string url =  string.Empty;
                try {
                    project.SendInfoToLog(string.Format(@"{0} массив mockups {1} extra содержит url", i, j), true);
                    url = project.Json.result.mockups[i].extra[j].url;
                }
                catch {
                    project.SendInfoToLog(string.Format(@"{0} массив mockups {1} extra НЕ содержит url", i, j), true);                
                }
                if(!string.IsNullOrEmpty(option_group) && !string.IsNullOrEmpty(url)) {
                    project.SendInfoToLog(string.Format(@"{0} массив mockups {1} extra содержит нужные данные - сохраняем", i, j), true);    
                    tb1.AddRow(new[] {option_group, url});                    
                }
                else {
                    project.SendInfoToLog(string.Format(@"{0} массив mockups {1} extra НЕ содержит нужные данные - идём к следующему", i, j), true);    
                }
            }    
        }
        else {
            project.SendInfoToLog(string.Format(@"{0} массив mockups не содержит массивов extra - идём к следующему mockups", i), true);
        }
    }
}
else {
    project.SendInfoToLog("Нет массивов mockups", true);
}
52825


52826



C#:
// Изначально у нас есть объект, содержащий массив объектов с определенными полями
var extra = new { 
    extra = new[] { 
        new {option_group = "1", url = "site3.ru"}, 
        new {option_group = "2", url = "site2.ru"}, 
        new {option_group = "3", url = "site1.ru"}
    }
};

// Дальше мы имеем массив объектов, содержащих массивы объектов
var mockups = new { mockups = 
    new[] { 
        extra, 
        extra, 
        extra 
    }
};

// И в конце, все эти данные - это оказывается один объект
var result = new{ result = mockups };
string json = Global.ZennoLab.Json.JsonConvert.SerializeObject(result); // Превращаем в JSON
project.Json.FromString(json); // Заносим в переменные Зеннопостера

IZennoTable tb1 = project.Tables["Таблица 1"];
// Сколько всего массивов mockups в result
int count_mockups = project.Json.result.mockups.Count;
if(count_mockups > 0) {
    project.SendInfoToLog("Есть массивы mockups", true);
    for(int i=0;i<count_mockups;i++) {
        project.SendInfoToLog(string.Format(@"Взяли в работу {0} массив mockups", i), true);
        int count_extra = project.Json.result.mockups[i].extra.Count;
        project.SendInfoToLog(string.Format(@"{0} массив mockups содержит {1} массивов extra", i, count_extra), true);        
        if(count_extra > 0) {
            for(int j=0; j < count_extra; j++) {
                project.SendInfoToLog(string.Format(@"С {0} массива mockups берем элемент {1}", i, j), true);
                string option_group = string.Empty;
                try {
                    project.SendInfoToLog(string.Format(@"{0} массив mockups {1} extra содержит option_group", i, j), true);
                    option_group = project.Json.result.mockups[i].extra[j].option_group;
                }
                catch {
                    project.SendInfoToLog(string.Format(@"{0} массив mockups {1} extra НЕ содержит option_group", i, j), true);
                
                }
                string url =  string.Empty;
                try {
                    project.SendInfoToLog(string.Format(@"{0} массив mockups {1} extra содержит url", i, j), true);
                    url = project.Json.result.mockups[i].extra[j].url;
                }
                catch {
                    project.SendInfoToLog(string.Format(@"{0} массив mockups {1} extra НЕ содержит url", i, j), true);                
                }
                if(!string.IsNullOrEmpty(option_group) && !string.IsNullOrEmpty(url)) {
                    project.SendInfoToLog(string.Format(@"{0} массив mockups {1} extra содержит нужные данные - сохраняем", i, j), true);    
                    tb1.AddRow(new[] {string.Format(@"mockups[{0}]",i), string.Format(@"extra[{0}]",j),option_group, url });                    
                }
                else {
                    project.SendInfoToLog(string.Format(@"{0} массив mockups {1} extra НЕ содержит нужные данные - идём к следующему", i, j), true);    
                }
            }    
        }
        else {
            project.SendInfoToLog(string.Format(@"{0} массив mockups не содержит массивов extra - идём к следующему mockups", i), true);
        }
    }
}
else {
    project.SendInfoToLog("Нет массивов mockups", true);
}
52827


C#:
// Изначально у нас есть объект, содержащий массив объектов с определенными полями
var extra = new { 
    extra = new[] { 
        new {option_group = "1", url = "site3.ru"}, 
        new {option_group = "2", url = "site2.ru"}, 
        new {option_group = "3", url = "site1.ru"}
    }
};

// Дальше мы имеем массив объектов, содержащих массивы объектов
var mockups = new { mockups = 
    new[] { 
        extra, 
        extra, 
        extra 
    }
};

// И в конце, все эти данные - это оказывается один объект
var result = new{ result = mockups };
string json = Global.ZennoLab.Json.JsonConvert.SerializeObject(result); // Превращаем в JSON
project.Json.FromString(json); // Заносим в переменные Зеннопостера

IZennoTable tb1 = project.Tables["Таблица 1"];
// Сколько всего массивов mockups в result
int count_mockups = project.Json.result.mockups.Count;
if(count_mockups > 0) {
    project.SendInfoToLog("Есть массивы mockups", true);
    for(int i=0;i<count_mockups;i++) {
        project.SendInfoToLog(string.Format(@"Взяли в работу {0} массив mockups", i), true);
        int count_extra = project.Json.result.mockups[i].extra.Count;
        project.SendInfoToLog(string.Format(@"{0} массив mockups содержит {1} массивов extra", i, count_extra), true);        
        if(count_extra > 0) {
            for(int j=0; j < count_extra; j++) {
                string temp =  string.Format(@"{0}", project.Json.result.mockups[i].extra[j]);
                tb1.AddRow(new[] {temp });    
            }
        }
        else {
            project.SendInfoToLog(string.Format(@"{0} массив mockups не содержит массивов extra - идём к следующему mockups", i), true);
        }
    }
}
else {
    project.SendInfoToLog("Нет массивов mockups", true);
}
52829


Собственно, вариантов несколько - в одних случаях нужны только значения, в других, значения с сохранением структуры, и как в последнем варианте - вытащить банально значения в формате json в виде строки (чтобы потом уже в случае необходимости - разбирать эти данные).
Но, мне всё же кажется, что с Json я всё ещё не умею работать. Думаю, кто-то сможет объяснить лучше о том, почему команда result.mockups.extra в данном случае не имеет смысла...
 

Platon

Client
Регистрация
26.09.2015
Сообщения
260
Благодарностей
122
Баллы
43
  • Спасибо
Реакции: qweeeraz и Soly

bizzon

Client
Регистрация
08.09.2015
Сообщения
1 101
Благодарностей
132
Баллы
63

Platon

Client
Регистрация
26.09.2015
Сообщения
260
Благодарностей
122
Баллы
43
делай еще три кубика вместо mockups[0] подставляй mockups[1], mockups[2] и mockups[3]
На скрине то нет этих данных только mockups[0]
 

bizzon

Client
Регистрация
08.09.2015
Сообщения
1 101
Благодарностей
132
Баллы
63
делай еще три кубика вместо mockups[0] подставляй mockups[1], mockups[2] и mockups[3]
На скрине то нет этих данных только mockups[0]
Да, спасибо, я это понял, введу цикл перебора вариантов mockups[].
Просто, почему-то мне казалось, что раньше я делал одним кубиком обыгрывая все варианты, типа
команда result.mockups.extra
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)