JsonCpp主要的类和常见函数
- Json::Value 表示所有的类型,比如int,string,object,array等,即存储json的所有数据。假设实例类为root
- Json::Reader 将json文件流或字符串解析到Json::Value对象中,使用parse成员函数。假设实例类为reader。 reader.parse()
- Json::Writer 与Json::Reader相反,将Json::Value转换成字符串流,其有两个子类Json::FastWriter和Json::StyleWriter分别输出不带格式的json和带格式的json
- 将json对象以字符串的方式打印出来,用root.toStyledString().c_str()
- 判断json对象中是否含有某个key值 root.isMember(“key”);
或value[“key”].isNull(); - 判断json对象是否为空root.empty()
- 判断json对象成员的个数 root.size();
- 删除某个key值,root.removeMember(“name”);
从字符串或文件流解析json
int ParseJsonFromString()
{
const char* str = "{\"name\": \"喜庆\",\"语文\": 100,\"数学\": 90,\"英语\": 80}";
Json::Reader reader;
Json::Value root;
if (reader.parse(str, root)) // reader将Json字符串解析到root,root将包含Json里所有子元素
{
printf("%s\n", root.toStyledString().c_str()); //将json字符串打印出来
}
Json::Value newIterm;
newIterm["历史"] = 88;
root.append(newIterm); //将新的数据添加到原有数据中
/*加一个对象,结果应该是
{
语文,100,
数学,90,
英语,80,
{
历史,88,
}
}
*/
return 0;
}
int ParseJsonFromStream()
{
std::ifstream ifs("./conf.json");
if(ifs.is_open())
{
Json::Reader reader;
Json::Value root;
if(reader.parse(ifs,root))
{
printf("%s\n", root.toStyledString().c_str()); //将json字符串打印
}
}
}
遍历json对象
int ParseJsonFromStream()
{
std::ifstream ifs("./conf.json");
if(ifs.is_open())
{
Json::Reader reader;
Json::Value root;
if(reader.parse(ifs,root))
{
Json::Value::Members mem = root.getMemberNames;
Json::Value::Members::iterator it = mem.begin(), end = mem.end();
for(; it != end; it ++)
{
std::str = *it;
root[str.c_str()].isString();//判断key值是否为string类型
root[str.c_str()].asString();//将key值对应的value值转换为string类型
root[str.c_str()].atInt();//将key值对应的value值转换为int类型
//isObject
}
}
}
}
将字符串转为json对象
void jsonWriteToFile(Json::Value &root)
{
Json::FastWriter writer;
std::string str = writer.write(root); //将json转换成字符串
Json::StyleWriter styledWriter;
std::string styledStr = styledWriter.write(root);
std::ofstream ofs("a.json");
ofs << str;
ofs.close();
}
常用点
-
给一个json字段赋值一个json对象,则空json对象显示的是null,如果json对象有内容,则一定有{}
-
给一个json字段赋值空字符串,则显示的是“”
-
给一个json字段添加数组内容,可以先给字段赋值json对象,再添加内容
Json::Value value;
Json::Value root;
root[“student”] = value;
root[“student”].append(“张三”);
显示的结果为 “student”:{“张三”,“李四”}, -
append后必须跟json对象才可以,如果append的是一个json对象,则显示为
[
{“key”:“value”},
{“key”:“value”},
]