linux c+ json库使用 遍历、打印

JsonCpp主要的类和常见函数

  1. Json::Value 表示所有的类型,比如int,string,object,array等,即存储json的所有数据。假设实例类为root
  2. Json::Reader 将json文件流或字符串解析到Json::Value对象中,使用parse成员函数。假设实例类为reader。 reader.parse()
  3. Json::Writer 与Json::Reader相反,将Json::Value转换成字符串流,其有两个子类Json::FastWriterJson::StyleWriter分别输出不带格式的json和带格式的json
  4. 将json对象以字符串的方式打印出来,用root.toStyledString().c_str()
  5. 判断json对象中是否含有某个key值 root.isMember(“key”);
    或value[“key”].isNull();
  6. 判断json对象是否为空root.empty()
  7. 判断json对象成员的个数 root.size();
  8. 删除某个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();
}

常用点

  1. 给一个json字段赋值一个json对象,则空json对象显示的是null,如果json对象有内容,则一定有{}

  2. 给一个json字段赋值空字符串,则显示的是“”

  3. 给一个json字段添加数组内容,可以先给字段赋值json对象,再添加内容
    Json::Value value;
    Json::Value root;
    root[“student”] = value;
    root[“student”].append(“张三”);
    显示的结果为 “student”:{“张三”,“李四”},

  4. append后必须跟json对象才可以,如果append的是一个json对象,则显示为
    [
    {“key”:“value”},
    {“key”:“value”},
    ]

你可能感兴趣的:(第三方库,json)