January 7, 2019

Работа с JSON. Часть 3.2. Введение в SimpleJSON.cs.

В прошлом уроке никто ДЗ не сделал, хоть я и не удивлен (Это интернет! Кто здесь делает домашки?) так чо проверки не будет (Вот вам!) и я сразу перейду к проблемам Newtonsoft.json.

Проблемы и недостатки Newtonsoft.json

Данный пакет, конечно очень удобен, например для создания сохранений для игр, (Monogame!) ведь так вы сами создаёте нужные классы. Однако, если вы работаете с большим количеством данных, а нужных классов у вас нет и нет возможности (деньги, лень, количество разработчиков, чаще лень) сделать их, то зачем их делать? Да, через работу в экземпляром намного легче, но всё же. Для решения этой проблемы к нам приходит SimpleJSON.cs (он же есть и на Java и Python) который вместо создания экземпляра по шаблону просто создает словарь (Dictionary) с типом JSONNode. Для работы с ним (в особенности в нашем случае) очень удобен цикл foreach, который проходит по всем элементам массива или словаря. Делается это по следующей схеме:

string someJSON = "{ \"Name\":\"Andrei\", \"Gender\":\"Male\", \"Age\":23, \"Hobbies\":[{ \"Sports\": { \"Tennis\":true, \"Football\":false, \"Basketball\":false }, \"Design\":true, \"Coding\": { \"Freelance\":false, \"Outsourcing\":true, \"Opensourcing\":true }}]}";
var parsedData = JSON.parse(someJSON);

Теперь мы имеем переменную parsedData, которая вышла парсингом JSON данных someJSON. Как вы заметили, в SimpleJSON JSON парсится методом parse класса JSON. Попробуем узнать, занимается ли наш мужчина фринансингом и выведем это в консоль. Это делается с помощью квадратных скобок, т.е. в скобках мы пишем "путь" к нашим данным. В нашем случае Hobbies -> Coding -> Freelance:

Console.WriteLine(parsedData[Hobbies][Coding][Freelance])
//В консоль будет выведено false

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

var Name = parsedData[Name]
int i = 1;
foreach(JSONNode r in parsedData[Hobbies][Sports])
{
    switch i
    {
        case 1 { Sport = "Tennis"; break; }
        case 2 { Sport = "Football"; break; }
        case 3 { Sport = "Basketball"; break; }
    }
    string Tennis = quot;That's {Name} is plays {Sport} is {r}";
    i++;
}

//В консоли будет следующее:
//That's Andrei is plays Tennis is true
//That's Andrei is plays Football is false
//That's Andrei is plays Basketball is false

Вы можете использовать это для создания бота Телеграмм, например. (намёк)


И на этом всё! Спасибо за внимание и удачного дня. Кстати, если вы хотите ещё, то обязательно заходите на мой Телеграмм канал! Тык!