Morpheus_God
@Morpheus_God

Как выбрать из json ответа нужные значение?

Добрый день, как мне выбрать из json ответа VkApi нужные мне ссылки на фотографии.
Получаю вот такой ответ:
{
"response":{
"count":4,
"items":[
{
"id":311889034,
"album_id":-6,
"owner_id":224327324,
"photo_75":"https://pp.userapi.com/c9503/v9503324/3d3b/8zNzFPaxxMw.jpg",
"photo_130":"https://pp.userapi.com/c9503/v9503324/3d3c/h9LxM-BqRao.jpg",
"photo_604":"https://pp.userapi.com/c9503/v9503324/3d3d/uam3AU-Jcy0.jpg",
"photo_807":"https://pp.userapi.com/c9503/v9503324/3d3e/eao9kRH8Q_4.jpg",
"width":800,
"height":600,
"text":"",
"date":1379451527,
"post_id":1
},
{
"id":312064459,
"album_id":-6,
"owner_id":224327324,
"photo_75":"https://pp.userapi.com/c304307/v304307324/626b/YgvoSAHcHQ8.jpg",
"photo_130":"https://pp.userapi.com/c304307/v304307324/626c/UcjIu-7nJKI.jpg",
"photo_604":"https://pp.userapi.com/c304307/v304307324/626d/uEPA7uLT5GA.jpg",
"width":600,
"height":600,
"text":"",
"date":1379694645,
"post_id":2
},
{
"id":331429690,
"album_id":-6,
"owner_id":224327324,
"photo_75":"https://pp.userapi.com/c617231/v617231335/9fc2/co1UOKpF7GE.jpg",
"photo_130":"https://pp.userapi.com/c617231/v617231335/9fc3/_3weMYE5ulk.jpg",
"photo_604":"https://pp.userapi.com/c617231/v617231335/9fc4/f-ojcC_UcHw.jpg",
"width":475,
"height":536,
"text":"",
"date":1401006605,
"post_id":11
},
{
"id":329480262,
"album_id":-6,
"owner_id":224327324,
"photo_75":"https://pp.userapi.com/c607729/v607729324/7b6d/lOVlcH4k_6U.jpg",
"photo_130":"https://pp.userapi.com/c607729/v607729324/7b6e/dtLhZVyJ0Tg.jpg",
"photo_604":"https://pp.userapi.com/c607729/v607729324/7b6f/ZReGA82apTc.jpg",
"width":570,
"height":428,
"text":"",
"date":1399029878,
"post_id":7
}
]
}
}


Vk я понимаю уже стал подписывать частично размер фотографии и помещать ссылку на нее.
Как мне выбрать максимально доступную по размеру версию фото? Так как вижу, что есть ссылки на "photo_604" а где то есть и "photo_807".
  • Вопрос задан
  • 451 просмотр
Решения вопроса 2
EreminD
@EreminD
Кое-что умею
для работы с json - вот https://www.newtonsoft.com/json
вам нужно изучить раздел https://www.newtonsoft.com/json/help/html/Querying...
Ответ написан
AlekseyNemiro
@AlekseyNemiro
full-stack developer
С помощью Newtonsoft.Json выполнить поиск по ключам можно так:

var data = (JObject)JsonConvert.DeserializeObject("данные JSON");
      
foreach(JObject item in data["response"]["items"])
{
  // var photos = item.Properties().Where(p => p.Name.StartsWith("photo_")).ToArray();
  // если считать, что последнее изображение самое большое
  var photo = item.Properties().LastOrDefault(p => p.Name.StartsWith("photo_") && 
    p.Value != null && 
    p.Value.ToString() != ""
  );

  /*
  // вариант с извлечением номера и сортировкой
  // при условии, что после photo_ всегда будет число
  // (если нет, то придется это учитывать отдельно)
  var photo = item.Properties().Where(p => p.Name.StartsWith("photo_") && 
    p.Value != null && 
    p.Value.ToString() != ""
  ).OrderBy(p => Convert.ToInt32(p.Name.Substring(p.Name.LastIndexOf("_") + 1))).LastOrDefault();
  */

  if (photo != null)
  {
    // выводим адрес изображения в консоль
    Console.WriteLine(photo.Value.ToString());
  }
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@EEclipsEE
если не хотите заморачиваться сильно и разбег состовляет только 807 604, то можно написать if что бы по дефолту брал 807 а если его нет то 604 ну. это при условии что идет выбор между 807 и 604 если же вариантов больше то if условий много получится, хотя кому что нравится
Ответ написан
flexer1992
@flexer1992
Unity Developer
Если нужен только один размер фото, то можно социальную сеть попросить только его, в документации про это написано. Раздел "параметры" https://vk.com/dev/photos.get
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы