您好我想用lib jsoncpp做一些简单的事情:
std::map<int,string> mymap;
mymap[0]="zero";
mymap[1]= "one";
Json::Value root;
root["teststring"] = "m_TestString"; //it works
root["testMap"] = mymap; //it does not work
Json::StyledWriter writer;
string output = writer.write( root );
错误是:错误C2679:二进制'=':找不到运算符,它采用类型'std :: map&lt; _Kty,_Ty&gt;'的右手操作数
你有想法解决这个问题,?我明白json :: value不能接受一个map但是要创建一个json文件,对吧? 非常感谢你
答案 0 :(得分:5)
是的,这不起作用,因为Json::Value
只接受通用类型或其他Json::Value
。因此,您可以尝试使用Json::Value
代替std::map
。
Json::Value mymap;
mymap["0"] = "zero";
mymap["1"] = "one";
Json::Value root;
root["teststring"] = "m_TestString"; // it works
root["testMap"] = mymap; // works now
Json::StyledWriter writer;
const string output = writer.write(root);
这应该可以胜任。如果您真的必须使用std::map<int, std::string>
,那么您必须先将其转换为Json::Value
。这将是(伪未经测试的代码):
std::map<int, std::string> mymap;
mymap[0] = "zero";
mymap[1] = "one";
// conversion of std::map<int, std::string> to Json::Value
Json::Value jsonMap;
std::map<int, std::string>::const_iterator it = mymap.begin(), end = mymap.end();
for ( ; it != end; ++it) {
jsonMap[std::to_string(it->first)] = it->second;
// ^ beware: std::to_string is C++11
}
Json::Value root;
root["teststring"] = "m_TestString";
root["testMap"] = jsonMap; // use the Json::Value instead of mymap
Json::StyledWriter writer;
const string output = writer.write(root);
答案 1 :(得分:1)
今天我也遇到同样的问题。希望它有所帮助。
how to write a template converts vector to Json::Value (jsoncpp)