C++ json【jsoncpp-src-0.5.0】

#include <iostream>
#include <string>
#include "json/json.h"


// 反序列化,解析json
void readJson() 
{
	std::string strValue = "{\"name\":\"json\",\"array\":[{\"cpp\":\"jsoncpp\"},{\"java\":\"jsoninjava\"},{\"php\":\"support\"}]}";

	// 用以反序列化的对象
	Json::Reader reader;

	Json::Value value;

	if (reader.parse(strValue, value))
	{   
		std::string out = value["name"].asString();
		std::cout << out << std::endl;
		const Json::Value arrayObj = value["array"];
		for (unsigned int i = 0; i < arrayObj.size(); i++)
		{   
			if (!arrayObj[i].isMember("cpp")) 
				continue;

			out = arrayObj[i]["cpp"].asString();
			std::cout << out;
			if (i != (arrayObj.size() - 1)) 
				std::cout << std::endl;
		}  


		// 如果iterator 放在此,竟然会出现 pos != arrayObj.end()比较失败,造成临界区越界
		// 而现在的写法却不会出现,未深入,
		// 环境:XP sp3,VS 2005
		//Json::Value::iterator pos;

		for (Json::Value::iterator pos = arrayObj.begin(); pos!=arrayObj.end();++pos)
		{
			Json::Value::Members member;

			member = (*pos).getMemberNames();

			Json::Value::Members::iterator m_pos;

			for (m_pos =member.begin();m_pos != member.end();++m_pos)
			{
				std::cout<<*m_pos << " = " <<  (*pos)[(*m_pos)].asString()<<std::endl;
			}
		}

	}   
}


// 反序列化,编码json
void writeJson() 
{
	Json::Value root;
	Json::Value arrayObj;
	Json::Value item;

	item["cpp"] = "jsoncpp";
	item["java"] = "jsoninjava";
	item["php"] = "support";
	arrayObj.append(item);

	root["name"] = "json";
	root["array"] = arrayObj;

	root.toStyledString();
	std::string out = root.toStyledString();
	std::cout << out << std::endl;
}



int main()
{
	readJson();

	writeJson();
	return 0;
}


阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页