如何使用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读写(反序列化)学生对象?这个库似乎没有任何与类的交互。 但是您可以使用构造函数和getter自己实现它如何使用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
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);