当前位置: 移动技术网 > IT编程>开发语言>C/C++ > C++实现json字符串与map的转换

C++实现json字符串与map的转换

2019年01月30日  | 移动技术网IT编程  | 我要评论

王凯杰bt种子,爱康智,吴政隆是包叙定的女婿

开源资源库

jsoncpp-src-0.5.0.tar.gz:
https://sourceforge.net/projects/jsoncpp/

jsoncpp-master.zip
https://github.com/open-source-parsers/jsoncpp

下面以jsoncpp050版本为例

1:map转化为jsonstr

string map2jsonstr(const map<string,string>& map_info)
{
	json::value jobject;
	for (map<string, string>::const_iterator iter = map_info.begin( ); iter != map_info.end( ); ++iter) 
	{
		jobject[iter->first] = iter->second;
	}
	return jobject.tostyledstring();
}

2:jsonstr转化为map

string itoa_self(int i)
{
	stringstream ss;
	ss << i;
	return ss.str();
}

map<string,string> jsonstr2map(const string& json)
{
	json::reader reader;
	json::value value;
	map<string, string> maps;

	if (json.length() > 0) 
	{
		if (reader.parse(json, value)) 
		{
			json::value::members members = value.getmembernames();
			for (json::value::members::iterator it = members.begin(); it != members.end(); it++) 
			{  
				json::valuetype vt = value[*it].type();
				switch (vt)
				{
				case json::stringvalue:
					{
						maps.insert(pair<string, string>(*it, value[*it].asstring()));
						break;
					}
				case json::intvalue:
					{
						int inttmp = value[*it].asint();
						maps.insert(pair<string, string>(*it, itoa_self(inttmp)));
						break;
					}
				case json::arrayvalue:
					{
						std::string strid;
						for (unsigned int i = 0; i < value[*it].size(); i++)
						{
							strid +=value[*it][i].asstring();
							strid +=",";
						}
						if(!strid.empty())
						{
							strid = strid.substr(0,strid.size()-1);
						}
						maps.insert(pair<string, string>(*it, strid));
						break;
					}
				default:
					{
						break;
					}
				}//end switch
			}//end for
		}//end if
	}

	return maps;
}

  

 

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网