Регулярка в снипете

f0x

Client
Регистрация
07.02.2014
Сообщения
54
Благодарностей
6
Баллы
8
Друзья.

Есть такой ответ от сервера в виде json

[{"uid":"53441085121420","name":"? Рецепты - Проще простого. Новинки 2015 ?","description":"Тут полно вкусненьких рецептов просто кликни сюда и все увидишь","shortname":"group53495839129721","picAvatar":"http://groupava2.mycdn.me/image?id=772047321465&bid=772047321465&t=32&plc=API&viewToken=RHKgEEnmdypqbryU0aCIaQ&tkn=a6sF9_sUv_8BEC8b40U89QaQUss","shop_visible_admin":false,"shop_visible_public":false,"members_count":99382}]
и такой сниппет для обработки ответа и закидывания его в таблицу

Код:
var table = project.Tables["таблица"];
table.ColSeparator = ";";

var uid = new System.Text.RegularExpressions.Regex(@"(?<=""uid"":"").*?(?="")",  System.Text.RegularExpressions.RegexOptions.None).Matches(json)[0];
string v1 = uid.ToString();

var name = new System.Text.RegularExpressions.Regex(@"(?<=""name"":"").*?(?="")",  System.Text.RegularExpressions.RegexOptions.None).Matches(json)[0];
string v2 = name.ToString();

var description = new System.Text.RegularExpressions.Regex(@"(?<=""description"":"").*?(?="")",  System.Text.RegularExpressions.RegexOptions.None).Matches(json)[0];
string v3 = description.ToString();

var shortname = new System.Text.RegularExpressions.Regex(@"(?<=""shortname"":"").*?(?="")",  System.Text.RegularExpressions.RegexOptions.None).Matches(json)[0];
string v4 = shortname.ToString();

var picAvatar = new System.Text.RegularExpressions.Regex(@"(?<=""picAvatar"":"").*?(?="")",  System.Text.RegularExpressions.RegexOptions.None).Matches(json)[0];
string v5 = picAvatar.ToString();

var members_count = new System.Text.RegularExpressions.Regex(@"(?<=""members_count"":).*?(?=\})",  System.Text.RegularExpressions.RegexOptions.None).Matches(json)[0];
string v6 = members_count.ToString();

var shop_visible_public = new System.Text.RegularExpressions.Regex(@"(?<=""shop_visible_public"":).*?(?=,)",  System.Text.RegularExpressions.RegexOptions.None).Matches(json)[0];
string v7 = shop_visible_public.ToString();


string str = String.Format("{0};{1};{2};{3};{4};{5};{6}", v1, v2, v3 , v4 , v5 , v6, v7 );

table.AddRow(str);

Проблем в том, что код иногда приходит без отдельных параметров, например без "shortname":"group53495839129721"

и тогда сниппет не отрабатывает и в таблицу вообще ничего не падает.

Как сделать, если нет параметра в ответе, то просто присваивать переменной v4 .... пустое значение?

Спасибо за подсказку!
 

LexxWork

Client
Регистрация
31.10.2013
Сообщения
1 190
Благодарностей
786
Баллы
113
var tmp = project.Variables["tmp"].Value;
var fields = "uid,name,description,shortname,picAvatar,members_count,shop_visible_public".Split(',');

var regex = new Regex("\"([^\"]+)\":\"?(.*?)\"?(,|}|\\])");
var d = regex.Matches(tmp).Cast<Match>().ToDictionary(k=>k.Groups[1].Value, v=>v.Groups[2].Value);
return string.Join(";", fields.Select(f=>(d.Keys.Contains(f))?d[f]:""));
 
Последнее редактирование:
  • Спасибо
Реакции: Nick и f0x

f0x

Client
Регистрация
07.02.2014
Сообщения
54
Благодарностей
6
Баллы
8
LexxWork, в очередной раз, огромное спасибо за помощь!
 

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