@bear1489

Как вытащить данные в формате json с помощью newtonsoft?

задача: вытащить в переменную количество (count) определенного сервиса (name)

например, мне нужно получить (count), у которого name == facebook

вот что я получаю в переменную

string item = "[{"id":"2","name":"Вконтакте","count":"108","logo":"/uploads/logo/vk.png","cost":"15"},{"id":"3","name":"Odnoklassniki","count":"6","logo":"/uploads/logo/ok.png","cost":"6"},{"id":"4","name":"Avito","count":"127","logo":"/uploads/logo/av.png","cost":"5"},{"id":"5","name":"viber","count":"127","logo":"/uploads/logo/vi.png","cost":"3"},{"id":"6","name":"telegram","count":"126","logo":"/uploads/logo/te.png","cost":"3"},{"id":"7","name":"whatsapp","count":"126","logo":"/uploads/logo/wh.png","cost":"1"},{"id":"8","name":"WeChat","count":"126","logo":"/uploads/logo/wc.png","cost":"6"},{"id":"9","name":"Google,Youtube,Gmail","count":"124","logo":"/uploads/logo/go.png","cost":"5"},{"id":"10","name":"youla.io","count":"126","logo":"/uploads/logo/yu.png","cost":"2"},{"id":"11","name":"Yahoo","count":"125","logo":"/uploads/logo/yo.png","cost":"2"},{"id":"12","name":"Microsoft","count":"125","logo":"/uploads/logo/mi.png","cost":"1"},{"id":"13","name":"facebook","count":"125","logo":"/uploads/logo/fb.png","cost":"1"},{"id":"14","name":"Rambler.ru","count":"126","logo":"/uploads/logo/ra.png","cost":"1"},{"id":"15","name":"yandex","count":"123","logo":"/uploads/logo/ya.png","cost":"5"},{"id":"16","name":"instagram","count":"125","logo":"/uploads/logo/in.png","cost":"4"},{"id":"17","name":"drugvokrug.ru","count":"124","logo":"/uploads/logo/we0.png","cost":"1"},{"id":"18","name":"mamba.ru","count":"125","logo":"/uploads/logo/78.jpg","cost":"1"},{"id":"19","name":"Qiwi","count":"125","logo":"/uploads/logo/qi.png","cost":"3"},{"id":"20","name":"WebMoney","count":"126","logo":"/uploads/logo/webmoney.png","cost":"5"},{"id":"21","name":"fotostrana.ru","count":"126","logo":"/uploads/logo/fotostrana.png","cost":"1"},{"id":"22","name":"ICQ","count":"126","logo":"/uploads/logo/ic.png","cost":"1"},{"id":"23","name":"Twitter","count":"127","logo":"/uploads/logo/tw.png","cost":"2"},{"id":"24","name":"Mail.ru","count":"126","logo":"/uploads/logo/ma.png","cost":"1"},{"id":"25","name":"Uber","count":"126","logo":"/uploads/logo/ub.png","cost":"3"}]";

далее создаю объект для парсинга json (библиотека newtonsoft)
JObject test = JObject.Parse(item);

как дальше мне получить count, name которого "name":"facebook"

string countFacebook = (string)test. ??????????????????????????????????????????

заранее благодарю )
  • Вопрос задан
  • 541 просмотр
Пригласить эксперта
Ответы на вопрос 3
VoidVolker
@VoidVolker Куратор тега C#
Dark side eye. А у нас печеньки! А у вас?
@Win332
.NET
Что-то типа:

var item = "ваш json что показали";

var json = JToken.Parse(item);
var count = json[11]["count"].ToObject<string>();


или

var array = JArray.Parse(item);
var count = array.Where(x => x["name"].ToObject<string>() == "facebook").First()["count"].ToObject<string>();


или

var array = JArray.Parse(item);
foreach (var element in array)
{
if (element["name"].ToObject<string>() == "facebook")
{
count = element["count"].ToObject<string>();
}
}


Как-то так. Я это не проверял, по этому не могу точно сказать что все будет работать так как нужно
Ответ написан
FoggyFinder
@FoggyFinder
Ваш json - массив, а значит вместо JObject нужно использовать JArray.

Дальше, если вы уверены что значение name для которого вы хотите узнать значение count существует и единственное используйте Single. Для извлечения значения определенного типа есть метод Value

var test = JArray.Parse(json);
var count = // count = 125
    test
    .Single(j => j.Value<string>("name") == "facebook")
    .Value<int>("count");


Но если подобных поисков у вас будет много, то я все-же советую воспользоваться предложением VoidVolker и сгенерировать классы для более удобной работы. Например, преобразовать в словарь с ключами - name и значениями SomeItem.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы