如何使用json c++;用我自己的目标? 我打算使用JSON C++。在阅读了它的简单示例之后,我仍然不知道如何将它用于我自己的对象?例如,我有一门课 class Student { public: Student(int id, string const& name) : m_id(id), m_name(name) {} private: int m_id; string m_name; };

如何使用json c++;用我自己的目标? 我打算使用JSON C++。在阅读了它的简单示例之后,我仍然不知道如何将它用于我自己的对象?例如,我有一门课 class Student { public: Student(int id, string const& name) : m_id(id), m_name(name) {} private: int m_id; string m_name; };,c++,json,serialization,deserialization,C++,Json,Serialization,Deserialization,如何使用json读写(反序列化)学生对象?这个库似乎没有任何与类的交互。 但是您可以使用构造函数和getter自己实现它 using json = nlohmann::json; class Student { public: Student(int id, string const& name) : m_id(id), m_name(name) {} Student(json data) : m_id(data["id"]), m

如何使用json读写(反序列化)学生对象?

这个库似乎没有任何与类的交互。 但是您可以使用构造函数和getter自己实现它

using json = nlohmann::json;

class Student
{
public:
    Student(int id, string const& name)
       : m_id(id), m_name(name)
    {} 
    Student(json data)
       : m_id(data["id"]), m_name(data["name"])
    {}

    json getJson()
    {
        json student;
        student["id"] = m_id;
        student["name"] = m_name;

        return student;
    }

private:
    int m_id;
    string m_name;
};

这是从json到定制类转换的另一种方式,实际上符合nlohmann官方repo中定义的最佳实践

h:

\ifndef学生
#定义学生
#包括
#包括“json.hpp”
班级学生
{
公众:
学生();
学生(int-id,const-std::string和name);
int getId()常量;
void setId(int newId);
std::string getName()常量;
void setName(const std::string和newName);
私人:
国际货币基金组织;
std::字符串m_名称;
};
//json序列化
内联void到_json(nlohmann::json&j,const Student&s)
{
j[“id”]=s.getId();
j[“name”]=s.getName();
}
来自_json的内联void(const nlohmann::json&j,Student&s)
{
s、 setId((j.at(“id”).get());
s、 setName(j.at(“name”).get());
}
#endif//STUDENT\u H
cpp:

#包括“Student.h”
#包括
学生::学生():学生(0,“”)
{
}
Student::Student(int-id,const-std::string&name):m_-id{id},m_-name{name}
{
}
int Student::getId()常量
{
返回此->m_id;
}
void Student::setId(int newId)
{
m_id=newId;
}
std::string Student::getName()常量
{
返回此->m_名称;
}
void Student::setName(const std::string和newName)
{
此->m_name=newName;
}
例如:

Student s{0, "x"};
nlohmann::json studentJson = s;
std::cout << "Student from object: " << s.getId() << std::endl;
std::cout << "Student from json: " << studentJson.at("id").get<int>() << std::endl;

//String
std::string jSt = studentJson.dump();  //{"id":0,"name":"x"}
Student s2 = studentJson;
Student s3 = nlohmann::json::parse(jSt);
学生s{0,x};
nlohmann::json studentJson=s;

std::cout AFAIK nlohmann json不是序列化库。它将JSON字符串转换为C++容器,反之亦然。你可能想在ThorsSerializer@Arunmu上看看,这很好。ThorsSerializer是否支持类多态性(指向派生类的基类指针)?对不起,不知道,我自己还没有使用它。不幸的是,大多数C++ JSON库不支持序列化和反序列化到类。请参阅JSON到C/C++对象转换库的响应。这需要为所有字段实现一个GETT/SETTER。对于不应公开(即声明为私有)的字段,可能不需要这样做。您可以将json函数作为朋友。
#include "Student.h"

#include<string>

Student::Student() : Student(0, "")
{

}

Student::Student(int id, const std::string &name) : m_id{id}, m_name{name}
{

}

int Student::getId() const
{
    return this->m_id;
}

void Student::setId(int newId)
{
    m_id = newId;
}

std::string Student::getName() const
{
    return this->m_name;
}

void Student::setName(const std::string &newName)
{
   this->m_name = newName;
}
Student s{0, "x"};
nlohmann::json studentJson = s;
std::cout << "Student from object: " << s.getId() << std::endl;
std::cout << "Student from json: " << studentJson.at("id").get<int>() << std::endl;

//String
std::string jSt = studentJson.dump();  //{"id":0,"name":"x"}
Student s2 = studentJson;
Student s3 = nlohmann::json::parse(jSt);