// Изначально у нас есть объект, содержащий массив объектов с определенными полями
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);
}