如何插入地图或矢量以生成 json 字符串 (jsoncpp)
Posted
技术标签:
【中文标题】如何插入地图或矢量以生成 json 字符串 (jsoncpp)【英文标题】:How to insert a map or vector to generate a json string (jsoncpp) 【发布时间】:2014-06-10 10:24:57 【问题描述】:嗨,我想用 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>' 类型的右侧操作数的运算符
你有解决这个问题的想法吗?我知道 json::value 不能接受地图,但应该创建一个 json 文件,对吧? 非常感谢
【问题讨论】:
【参考方案1】:是的,这不起作用,因为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);
【讨论】:
非常感谢,它运行良好,只需将您的回复 it.first 更改为 (*.it).first ,否则它不会构建。 啊好吧...我没有测试代码对不起,我会更正它;)【参考方案2】:今天我遇到了同样的问题。希望对您有所帮助。
how to write a template converts vector to Json::Value (jsoncpp)
【讨论】:
以上是关于如何插入地图或矢量以生成 json 字符串 (jsoncpp)的主要内容,如果未能解决你的问题,请参考以下文章
如何以编程方式 (Python/JS/C++) 将矢量图形 (SVG) 插入 JPG/TIF 等光栅图像?