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

本文介绍了如何使用开源库jsoncpp在C++中实现json字符串与map的相互转换。提供了jsoncpp的下载链接,并以jsoncpp050版本为例,详细讲解了转换的两个主要步骤:map转化为json字符串以及json字符串转化为map。

开源资源库

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

#include "json.h"
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;
}

  

 

转载于:https://www.cnblogs.com/manongdashu/p/10334496.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值