如何插入地图或矢量来生成json字符串(jsoncpp)

时间:2014-06-10 10:24:57

标签: c++ json vector map jsoncpp

您好我想用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文件,对吧? 非常感谢你

2 个答案:

答案 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)