jsoncpp
一. json基础
类型:
1. Json::Value为主要数据类型;
2. Json::Reader将文件流或字符串创解析到Json::Value中,主要使用parse
函数;3. Json::Writer:与JsonReader相反,将Json::Value转换成字符串流等,Writer类是一个纯虚类,并不能直接使用。在此我们使用 Json::Writer 的子类:son::FastWriter
(将数据写入一行,没有格式),Json::StyledWriter
(按json格式化输出,易于阅读)
二. 解析json
1. 从内存解析json
void f() {Json::Value root;Json::Reader reader;char str[] = "{\"name\" : \"liushall\", \"age\" : 20, \\"files\" : [\"1.json\", \"2.json\"]}";if ( !reader.parse( str, root ) ) {cout << "parse error.\n";return -1;}cout << "name : " << root["name"].asString() << endl;cout << "age : " << root["age"].asInt() << endl;Json::Value files = root["files"];cout << "files : ";for( int i = 0; i < files.size(); i++ ) {cout << files[i].asString() << ' ';}
}
2. 从文件中解析json
提供的json文件:
{"name" : "liushall","age" : 10;
}
代码:
void f() {Json::Reader reader;Json::Value root;ifstream ifs("test.json");if ( !reader.parse( ifs, root ) ) {cout << "parse error.\n";return -1;}cout << root["name"].asString() << endl;cout << root["age"].asInt() << endl;
}
三. 封装json
1. 简单json数据封装
void f() {Json::Value root;Json::StyledWriter writer;root["name"] = "liushall";root["age"] = 20;string str = writer.write( root );cout << str << endl;
}
2. 封装json数据——内嵌array的object
int main() {Json::Value root;Json::StyledWriter writer;root["name"] = "liushall";root["age"] = 20;root["msg"] = "linux";Json::Value files;files["haha"] = "1.cpp";files["ha"] = "2.cpp";root["files"] = files;string str = writer.write( root );cout << str << endl;
}
3. 封装json数据——内嵌object的array
void f() {
Json::Value root;
Json::StyledWriter writer;{
Json::Value person; person["name"] = "liushall";person["age"] = 100;root.append( person );}{
Json::Value person; person["name"] = "Kit";person["age"] = 89;root.append( person );}root.append( "a json note" ); string json_file = writer.write(root);cout << json_file << endl;
}
注意,不能直接用root[0] = person;
,需要声明[]内数字的类型,即root[1U] = person
,声明为unsigned类型。
参考:
https://www.cnblogs.com/tocy/p/json-intro_jsoncpp-lib.html
https://www.cnblogs.com/DswCnblog/p/6678708.html