Разбор и фильтрация JSON данных из API в C# приложение - PullRequest
0 голосов
/ 29 мая 2020

Моя цель - получить JSON данные из API "вирусного трекера" и преобразовать их в метку. Это для моего личного проекта IB, поэтому я только начал изучать c#. Установите этот старый код и попытайтесь исправить его, он работал с базовым c GET API, но не работал с тем, который я использую. (Английский sh не мой основной язык)

ОТВЕТ ПОЧТОВОГО

{
   "results": [
      {
         "total_cases": 5954607,
         "total_recovered": 2622507,
         "total_unresolved": 2255875,
         "total_deaths": 363208,
         "total_new_cases_today": 53700,
         "total_new_deaths_today": 1659,
         "total_active_cases": 45257,
         "total_serious_cases": 2698001,
         "total_affected_countries": 213,
         "source": {
            "url": "https://thevirustracker.com/"
         }
      }
   ],
   "stat": "ok"
}

C# КОД

//Creating Client connection 
        RestClient restClient = new RestClient("https://thevirustracker.com/free-api?global=stats");


        //Creating request to get data from server
        RestRequest restRequest = new RestRequest("total_cases", Method.GET);


        // Executing request to server and checking server response to the it
        IRestResponse restResponse = restClient.Execute(restRequest);


        // Extracting output data from received response
        string response = restResponse.Content;

        // Parsing JSON content into element-node JObject
        var jObject = JObject.Parse(restResponse.Content);

        //Extracting Node element using Getvalue method
        string cases = jObject.GetValue("total_cases").ToString();
        label1.Text = (cases);

ОШИБКА

An unhandled exception of type 'Newtonsoft.Json.JsonReaderException' occurred in Newtonsoft.Json.dll
Unexpected character encountered while parsing value: <. Path '', line 0, position 0.

Моя конечная цель с этим кодом состоит в том, чтобы label1 отображал «5954607»

Помните, что я новичок в этом, так что если вы можете Объясните изменения, которые вы внесли в код, я действительно ценю это.

1 Ответ

0 голосов
/ 29 мая 2020

Вы неправильно используете RestRequest или неправильно инициализировали RestClient.

Если этот URL-адрес, который вы использовали в RestClient, является полным URL-адресом, вам не нужен «ресурс» в RestRequest.

Из-за этой ошибки вы получили ответ HTML, обозначенный ошибкой

При анализе значения обнаружен неожиданный символ: <. Путь '', строка 0, позиция 0. </p>

Значение restResponse.Content, вероятно, начинается с <html, а это недопустимо JSON.

Json полезная нагрузка немного сложнее, чем вы кодировали. Объект результатов содержит массив с объектом, имеющим свойство stat.

Объединение этих исправлений дает вам следующий код.

RestClient restClient = new RestClient("https://thevirustracker.com/free-api?global=stats");

//Creating request to get data from server
RestRequest restRequest = new RestRequest(null, DataFormat.Json);

// Executing request to server and checking server response to the it
IRestResponse restResponse = restClient.Execute(restRequest);

// Extracting output data from received response
string response = restResponse.Content;

// Parsing JSON content into element-node JObject
var jObject = JObject.Parse(restResponse.Content);

//Extracting 
// the object has a results property 
// that is an array with one item (zero-based)
// on index 0 there is an object
// that has a property total_cases
string cases = (string) jObject["results"][0]["total_cases"];
label1.Text = (cases);
...