December 22, 2018

Работа с JSON. Часть 3.1. Парсинг в объект или в JSONNode.

Здравствуйте! В этой части серии статей о работе с JSON на C# я поговорю о такой интересной теме как парсинг. Как раз из-за нее я и начал делать данную серию, чтобы не писать о JSON в курсе по созданию бота Телеграмм. Это, наверное, последняя часть трилогии статей о работе с JSON, так что давайте начнем.


Примечание: Эта часть будет поделена на три части, чтобы иметь возможность обратной связи, так что каждая часть будет довольно короткой, но вместе они длиннее чем обычная длина одной статьи.

Введение

Парсинг. Интересное слово, не так ли? Но что оно означает? Парсинг - это принятое в информатике определение синтаксического анализа. Для этого создается математическая модель сравнения лексем с формальной грамматикой, описанная одним из языков программирования. (в нашем случае C#)

Когда человек читает, то, с точки зрения науки филологии, он совершает синтаксический анализ, сравнивая увиденные на бумаге слова (лексемы) с теми, что есть в его словарном запасе (формальной грамматикой).

Принято разделять процесс парсинга на эти этапы:

  1. выход в интернет, получение доступа к коду веб-ресурса и его скачивание;
  2. чтение, извлечение и обработка данных;
  3. представление извлеченных данных в удобоваримом виде (формате)

Парсинг в объект класса

Ладно, ладно, давайте на минуточку отойдем от этих веберских словечек и вернемся к самому важному - к коду. Как я уже говорил, мы будем парсить двумя способами. Первый из них - парсинг в объект определенного класса. Тут самое сложное - составить правильный класс. Только не думайте "Ой, всего лишь составить класс! Да это проще простого!". Нет. Это совсем не просто, особенно если у вас очень много данных. Но давайте по порядку...

Ну, мы уже установили Newtonsoft.json в прошлой статье, так что останавливаться на этом не буду. Вот наш JSON в string переменной JsonData: (я его взял с первой части серии статей)

string JsonData = "{ \"Name\":\"Andrei\", \"Gender\":\"Male\", \"Age\":23, \"Hobbies\":[{ \"Sports\": { \"Tennis\":true, \"Football\":false, \"Basketball\":false }, \"Design\":true, \"Coding\": { \"Freelance\":false, \"Outsourcing\":true, \"Opensourcing\":true }}]}"; //важно не забыть поставить слеши перед двойными кавычками, чтобы программа не посчитала их за окончание строки, но не сделайте частью строки реальные начало и конец строки

Теперь чтобы спарсерить эту строку нам нужен подходящий класс. Помните предыдущую статью, где мы смотрели как показывать данные JSON в полях класса? Это нам сейчас понадобится как никогда. Но перед этим расскажу как сделать так, чтобы программа поняла, какие поля соответствуют тем же данным в JSON. Это делается конструкцией [JsonProperty(*Имя переменной в строчном типе*)] прямо предыдущей строчкой перед полем. (Отметьте, что нельзя расположить два или более таких конструкции "штабелями", иначе "ошибка!") Это выглядит примерно так:

[JsonProperty("name")]
public string Name { get; set; }

Однако не подумайте, что иначе нельзя. Нет! Можно просто назвать поле также, как и в JSON-е, но это может быть неуместно, ведь в JSON можно называть переменные как хочешь, и если ты даже не получишь ошибку из-за пробела в названии поля, то точно получишь сообщение из-за несоответствия неймингу полей, так что если что, я вас не учил всегда так и делать, всегда есть другой путь, как есть тернарный оператор вместо if-else.

Так, об этом я вам рассказал, теперь давайте дам вам меленькое задание: попробуйте сами составить правильный класс. Если чего-то непомните или вам нужен JSON в красивой печати, то идите в первую и вторую часть. Жду ваши ответы в комментариях и до новых встреч! Продолжение должно выйти уже совсем скоро.

Продолжение следует...

JSON will return in "Work with JSON: part 3.2"