3

嗨,我想用 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<_Kty,_Ty>”类型的右侧操作数的运算符

你有解决这个问题的想法吗?我知道 json::value 不能接受地图,但应该创建一个 json 文件,对吧?非常感谢您

4

2 回答 2

5

是的,这不起作用,因为Json::Value它只接受泛型类型或其他Json::Value. 因此,您可以尝试使用 aJson::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);

这应该可以完成这项工作。如果您真的必须使用 a std::map<int, std::string>,那么您必须将其转换为 a 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);
于 2014-06-10T11:12:36.070 回答
2

今天我也遇到了同样的问题。希望能帮助到你。

如何编写模板将向量转换为 Json::Value (jsoncpp)

于 2014-11-06T06:14:05.380 回答