json解析实例-使用picojson.h

通常c++解析json会使用jsoncpp,使用起来也很方便,但是需要引入几个源文件。
如果你不希望引入源文件或第三方库,那么picojson就是一个比较好的选择,因为它只有一个头文件。
本文通过一个例子来讲解如何使用picojson
##情景介绍
统计某一个问题的答题情况,包括每个选项有多少人选择,一共多少人答题。

{
	"questionId":1,
	"answerSummary":
	{
		"attendStudents":200,
		"optionStats":[
		{
			"num":20,
			"option":0
		},
		{
			"num":60,
			"option":1
		},
		{
			"num":100,
			"option":2
		}
		]
	}
}

##实现代码

std::string ToJson() {

	//picojson::value 同时只能代表一种类型,要么是double等原始类型,或者是数组array,或者object
	//object可以保存键值对,是个map
	//object键值对的值可以是任意类型的value

	picojson::value json;
	//这里json保存键值对,所以是个object
	json.set<picojson::object>(picojson::object());
	json.get<picojson::object>()["questionId"] = picojson::value(double(1));

	//这里answerSummary也是一个键值对,所以也是object
	json.get<picojson::object>()["answerSummary"].set<picojson::object>(picojson::object());

	json.get<picojson::object>()["answerSummary"].get<picojson::object>()["attendStudents"] = picojson::value(double(200));
	//这里optionStats是一个数组,所以是个array
	json.get<picojson::object>()["answerSummary"].get<picojson::object>()["optionStats"].set<picojson::array>(picojson::array());

	picojson::value option_stat;
	//这里option_stat也是一个键值对,所以也是object
	option_stat.set<picojson::object>(picojson::object());
	option_stat.get<picojson::object>()["option"] = picojson::value(double(0));
	option_stat.get<picojson::object>()["num"] = picojson::value(double(20));
	//array的实现是个vector,所以使用push_back
	json.get<picojson::object>()["answerSummary"].get<picojson::object>()["optionStats"].get<picojson::array>().push_back(option_stat);

	option_stat.get<picojson::object>()["option"] = picojson::value(double(1));
	option_stat.get<picojson::object>()["num"] = picojson::value(double(60));
	//array的实现是个vector,所以使用push_back
	json.get<picojson::object>()["answerSummary"].get<picojson::object>()["optionStats"].get<picojson::array>().push_back(option_stat);

	return json.serialize();
};
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值