JSON получить данные без регулярок

ibred

Client
Регистрация
04.04.2015
Сообщения
3 835
Благодарностей
3 544
Баллы
113
Приветствую!
Передо мной встала задача в получении определенных данных из JSON.

Есть:
Код:
{"response":{"count":1642134,"items":[{"id":1034437,"first_name":"Виктория","last_name":"Боня","relation":2,"relation_partner":{"id":108694415,"first_name":"Alexander","last_name":"Smurfit"}},{"id":188215040,"first_name":"Масяня","last_name":"Куваева","relation":2},{"id":238643227,"first_name":"Татьяна","last_name":"Чернышова","relation":2,"relation_partner":{"id":220151899,"first_name":"Олег","last_name":"Фомин"}},{"id":93286033,"first_name":"Александра","last_name":"Мамаева"}]}}
Если по данному примеру: нужно получить id, first_name и данные из relation_partner (id, first_name). То есть мы берем первые данные только при условии, что есть relation_partner.

То есть из этого примера мы должны забрать данные только из 2 строк:
Код:
{"id":1034437,"first_name":"Виктория","last_name":"Боня","relation":2,"relation_partner":{"id":108694415,"first_name":"Alexander","last_name":"Smurfit"}}

{"id":238643227,"first_name":"Татьяна","last_name":"Чернышова","relation":2,"relation_partner":{"id":220151899,"first_name":"Олег","last_name":"Фомин"}}
На выходе должна быть строки следующего вида, например:
238643227;Виктория;108694415;Alexander
238643227;Татьяна;220151899;Олег

Нашел на форуме Javascipt:
http://zennolab.com/discussion/threads/dannye-v-formate-json.12779/page-2#post-115497
Но не понял, как его адаптировать именно под мою ситуацию.

Помогите, пожалуйста.
 

LexxWork

Client
Регистрация
31.10.2013
Сообщения
1 190
Благодарностей
786
Баллы
113
да там галимый джаваскрипт, может глюкануть

Код:
string input = project.Variables["text"].Value;//заменить на свою переменную
var regex1 = new Regex("\\{\"id\".*?(?=((,{\"id\")|]))");
var regex2 = new Regex("id\":(\\d+).*?first_name\":\"([^\"]+)");

var parsed_data = regex1.Matches(input)
    .Cast<Match>()
    .Select(v=>v.Value)
    .Where(s=>s.Contains("relation_partner"))
    .Select(j=>
            string.Join(";", regex2.Matches(j)
                .Cast<Match>()
                .Select(m=>m.Groups[1].Value+";"+m.Groups[2].Value)
                .ToArray()
            )
    )
    .ToArray();

return string.Join("\r\n", parsed_data);
 
  • Спасибо
Реакции: ibred

ibred

Client
Регистрация
04.04.2015
Сообщения
3 835
Благодарностей
3 544
Баллы
113

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 707
Баллы
113
в директивы using нужно прописать using System.Text.RegularExpressions;
 
  • Спасибо
Реакции: ibred

ibred

Client
Регистрация
04.04.2015
Сообщения
3 835
Благодарностей
3 544
Баллы
113
Огромное спасибо, LexxWork!
Спасибо, rostonix за оперативное решение в ходе тестирование кода :-)

Так же благодарю.
Буду изучать!

P.S. Я знаю, что есть таска по работе с JSON штатными методами и хотелось бы закинуть туда +1 запрос от нуждающихся в данном решении, это действительно необходимо.
 

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