Поиск значений в json на c#

92
06 ноября 2021, 14:00

Мне нужно получать json из веб-сервиса, потом пройтись по нему, чтобы найти определённые значения. Основной проблемой является то, что json приходит в виде

[{данные},{данные}, ...] то есть нету корневого элемента. Раньше брал из файла и просто добавил заголовок, что позволило перебирать. Сейчас это очень неудобно было бы делать, подскажите, есть ли возможность нормально работать с json такого формата и если да, то как?

Answer 1

Скачайте NuGet Newtonsoft.Json и попробуйте перебрать так:

string json = "[{\"key\":\"value1\"},{\"key\":\"value2\"},{\"key\":\"value3\"}]";
JArray array = JArray.Parse(json);
foreach (var e in array) {
    Console.WriteLine(e["key"]);
}
Answer 2

Вообщем, предположу, что есть некий запрос к веб-сервису:

var request = (HttpWebRequest)WebRequest.Create("your_address");
//параметры запроса

Далее, нам нужно получить результат (ответ) от самого вэб-сервиса:

var response = (HttpWebResponse)request.GetResponse();

Теперь, при условии, что мы получили некий response, его нужно как-то прочитать, и десериализовать, пример:

//json формата [{data_obj1},{data_obj2},...{data_objN}] мы можем десериализовать в список, не используя root_object 
var ser = new DataContractJsonSerializer(typeof(List<data_object>));
List<data_object> recieved_data = new List<data_object>();
using(var reader = new StreamReader(response.GetResponseStream(), true))
{
   recieved_data = ser.ReadObject(reader) as List<data_object>
}

Так как в примере используются объекты из пространства имен System.Runtime.Serialization и System.Runtime.Serialization.Json, соответственно следует описать и объект data_object:

[DataContract]
public class data_object
{
  [DataMember]
  public string prop1 {get;set;}
  [DataMember]
  public string prop2 {get;set;}
  ...
  [DataMember]
  public string propN {get;set;}
}

Ну а поиск реализовать средствами Linq или перебором: LINQ:

var f_data_object = recieved_data.Where(it => it.prop1 == "Foo").FirstOrDefault();;

Перебор:

foreach(var item in received_data)
{
  if(item.prop1 == "Foo")
  {
    //TA-DAM!!!
  }
}
READ ALSO
получение JSON в ajax, php

получение JSON в ajax, php

есть небольшой скрипт поиска сделан на php (работает и получает ответ без подключения ajax)

237
Доступ к сетевой папке из php

Доступ к сетевой папке из php

Нужно получить файлы из сетевой папки через php (web-сервер Apache+php на Windows2008 R2 Enterprise) На самом сервере я могу подключить сетевую папку, все данные...

199
Не работает mysqli_real_escape_string

Не работает mysqli_real_escape_string

Вот, где я сталкиваюсь с пробоемой:

116