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

Zai*_*ker 3 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 );
Run Code Online (Sandbox Code Playgroud)

错误是:错误C2679:二进制'=':找不到运算符,它采用类型'std :: map <_Kty,_Ty>'的右手操作数

你有想法解决这个问题吗?我明白json :: value不能接受一个map但是要创建一个json文件,对吧?非常感谢你

Aqu*_*pax 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);
Run Code Online (Sandbox Code Playgroud)

这应该做的工作.如果你真的必须使用a 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);
Run Code Online (Sandbox Code Playgroud)