如何插入地图或矢量以生成 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&lt;int, std::string&gt;,那么您必须先将其转换为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 等光栅图像?

如何插入向量图。地图<int,矢量<int>>地图;我想将值一一插入到向量中

如何更新矢量或地图的值

什么叫矢量地图 关于矢量地图介绍

地图瓦片整体介绍

如何在c ++中将值从矢量转换为地图?