Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗cpSpSrSf 595 of 696 menu
◀ ▶

Несколько форм в C++

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

Один тип JSON на все варианты не подходит, поэтому сначала читают строковый тег kind, затем поля нужной формы обычными условиями:

#include <iostream> #include <nlohmann/json.hpp> #include <string> int main() { std::string raw = R"({"kind":"paid","amount":900})"; nlohmann::json msg = nlohmann::json::parse(raw); std::string kind = msg.at("kind").get<std::string>(); if (kind == "paid") { int amount = msg.at("amount").get<int>(); std::cout << amount << "\n"; } else if (kind == "declined") { std::string reason = msg.at("reason").get<std::string>(); std::cout << reason << "\n"; } return 0; }

При записи ту же метку кладут рядом с полями варианта; новый вариант - новая ветка if и свой набор ключей в JSON:

#include <iostream> #include <nlohmann/json.hpp> #include <string> int main() { nlohmann::json declined; declined["kind"] = "declined"; declined["reason"] = "limit"; std::cout << declined.dump() << "\n"; return 0; }

Соберите JSON с kind "opened" и msg_id 7. Выведите строку dump.

Разберите {"kind":"archived","folder":"2024"}, прочитайте kind и выведите имя папки для варианта "archived".

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить