c++的json库
json
适用于现代 C++ 的 JSON。
项目地址:https://gitcode.com/gh_mirrors/js/json
免费下载资源
·
现在c++的库其实实现都差不多,因为没有c++没有反射功能,所以只能按照键值对方式组合和解析。每个库原理差不多,主要是接口的实现。
目前有很多库了,只介绍4个。
json11,rapidjson,jsoncpp,nlohmann
大家自己查阅官方文档吧,总体都是类似map这样的。
用jsoncpp举例,主要就是value类型
int ParseJsonFromString()
{
const char* str = "{\"uploadid\": \"UP000000\",\"code\": 100,\"msg\": \"\",\"files\": \"\"}";
Json::Reader reader;
Json::Value root;
if (reader.parse(str, root)) // reader将Json字符串解析到root,root将包含Json里所有子元素
{
std::string upload_id = root["uploadid"].asString(); // 访问节点,upload_id = "UP000000"
int code = root["code"].asInt(); // 访问节点,code = 100
}
return 0;
}
很多库的使用都是这样的。
nlohmann库需要实现解析过程。
以下是json字符串解析:
int ParseJson()
{
// create object from string literal
json j = "{ \"happy\": true, \"pi\": 3.141 }"_json;
// or even nicer with a raw string literal
auto j2 = R"(
{
"happy": true,
"pi": 3.141
}
)"_json;
std::string s = j.dump();
return 0;
}
如果需要将json字符串与结构体转换
struct MyContainer {
std::string name;
std::string address;
int age;
list<string> lst;
double score;
};
//1.重载转换函数
void to_json(nlohmann::json& j, const MyContainer& p) {
j = json{ {"name", p.name}, {"address", p.address}, {"score", p.score},{"age",p.age},{"lst",p.lst} };
}
void from_json(const nlohmann::json& j, MyContainer& p) {
j.at("name").get_to(p.name);
j.at("address").get_to(p.address);
j.at("score").get_to(p.score);
j.at("age").get_to(p.age);
j.at("lst").get_to(p.lst);
}
需要在同名称空间实现上面的方法,c++没有反射,需要自己实现映射关系。以上接口方法就是需要结构体与json类型建立映射关系。
int defParseJson()
{
MyContainer c;
c.age = 3;
c.name = "jnoy";
c.score = 6;
c.lst.push_back("aa");
c.lst.push_back("cc");
json j = c;//将结构体转换成json对象
std::string str= j.dump();//转换字符串
std::cout << str << std::endl;
//必须在同名称空间,实现to_json,from_json
auto p= j.get<MyContainer>();//转换结构体
// json k = c;
return 0;
}
准备好以后的序列化和反序列化。
GitHub 加速计划 / js / json
41.72 K
6.61 K
下载
适用于现代 C++ 的 JSON。
最近提交(Master分支:1 个月前 )
960b763e
4 个月前
8c391e04
6 个月前
更多推荐
已为社区贡献1条内容
所有评论(0)