Как десериализировать класс в котором внутри другой класс в json?

Чтобы десериализировать класс, в котором внутри другой класс, из формата JSON в C++, вам понадобится использовать библиотеку для работы с JSON, такую как RapidJSON или jsoncpp.

1. Импортируйте необходимую библиотеку, чтобы работать с JSON в вашем проекте C++.

#include <rapidjson/document.h>

2. Определите классы, которые вы хотите десериализировать из JSON. Допустим, у нас есть класс InnerClass и класс OuterClass, который содержит экземпляр InnerClass.

class InnerClass {
public:
    int myInt;
    std::string myString;
};

class OuterClass {
public:
    InnerClass inner;
    std::string otherData;
};

3. Создайте JSON-строку с данными для десериализации. Пример:

const std::string jsonStr = R"({"inner":{"myInt":42,"myString":"Hello"},"otherData":"World"})";

4. Десериализация JSON-строки в объект C++:

OuterClass deserializeJson(const std::string& jsonStr) {
    rapidjson::Document document;
    document.Parse(jsonStr.c_str());

    OuterClass obj;
    
    // Получаем значение inner из JSON-документа
    const rapidjson::Value& innerObj = document["inner"];
    
    // Десериализуем inner класс
    obj.inner.myInt = innerObj["myInt"].GetInt();
    obj.inner.myString = innerObj["myString"].GetString();
    
    // Десериализуем другие поля класса
    obj.otherData = document["otherData"].GetString();
    
    return obj;
}

5. Теперь вы можете вызвать эту функцию для десериализации класса:

int main() {
    const std::string jsonStr = R"({"inner":{"myInt":42,"myString":"Hello"},"otherData":"World"})";
    OuterClass obj = deserializeJson(jsonStr);
    
    // Выводим полученные данные
    std::cout << obj.inner.myInt << std::endl;      // 42
    std::cout << obj.inner.myString << std::endl;   // Hello
    std::cout << obj.otherData << std::endl;        // World
    
    return 0;
}

Обратите внимание, что в коде используется библиотека RapidJSON. Вы также можете использовать другие библиотеки для работы с JSON в C++, но процесс десериализации будет примерно таким же.