Poco Json使用示例

2 篇文章 0 订阅
1 篇文章 0 订阅
#include "Poco/JSON/JSON.h"
#include "Poco/JSON/Array.h"
#include "Poco/JSON/Parser.h"
#include "Poco/JSON/ParseHandler.h"
#include <iostream>

using Poco::JSON::Object;
using Poco::JSON::Array;
using Poco::JSON::ParseHandler;
using Poco::JSON::Parser;
/*
{
"name" : "Franky"
"children" : 
	[ 
		"Jonas",
		"Ellen"
	], 
"address": { 
	"street": "A Street", 
	"number": 123, 
	"city":"The City"
 } 
}
*/
std::string jsons = "{ \"name\" : \"Franky\", \"children\" : [ \"Jonas\", \"Ellen\" ], \
					\"address\": { \"street\": \"A Street\", \"number\": 123, \"city\":\"The City\"} }";
int main(int args, char* argv[])
{
	/* parse json */
	Object::Ptr json;
	Parser parser;
	Poco::Dynamic::Var object;
	try
	{
		object = parser.parse(jsons);
	}
	catch (Poco::JSON::JSONException& e)
	{
		std::cout << e.message() << std::endl;
		_ASSERT(false);
	}

	Object::Ptr jObj = object.extract<Object::Ptr>();
	if (jObj)
	{
		Poco::Dynamic::Var name = jObj->get("name");
		if (name.isString())
		{
			std::cout << "name: " << name.convert<std::string>() << std::endl;
		}

		if (jObj->isArray("children"))
		{
			Poco::JSON::Array::Ptr pArray = jObj->getArray("children");
			std::cout << "children[0]: " << pArray->get(0).convert<std::string>() << std::endl;			
			std::cout << "children[1]: " << pArray->get(1).convert<std::string>() << std::endl;			
			std::cout << "children[0]: " << pArray->getElement<std::string>(0) << std::endl;
			std::cout << "children[1]: " << pArray->getElement<std::string>(1) << std::endl;
		}

		if (jObj->isObject("address"))
		{
			Object::Ptr pObject = jObj->getObject("address");
			if (pObject->has("street"))
			{
				std::cout << "street: " << pObject->get("street").convert<std::string>() << std::endl;
			}
			if (pObject->has("city"))
			{
				std::cout << "city: " << pObject->get("city").convert<std::string>() << std::endl;
			}
			if (pObject->has("number"))
			{
				std::cout << "number: " << (Poco::UInt32)pObject->get("number") << std::endl;
				std::cout << "number: " << pObject->get("number").convert<Poco::UInt32>() << std::endl;
			}
		 }
	}

	// construct json
	Object newObj;
	newObj.set("name", "fruit");
	newObj.set("number", 3);
	
	Array fArr;
	Object orange;
	orange.set("name", "orange");
	orange.set("color", "orange");
	fArr.add(orange);
	Object apple;
	apple.set("name", "apple");
	apple.set("color", "red");
	fArr.add(apple);
	Object strawberry;
	strawberry.set("name", "strawberry");
	strawberry.set("color", "red");
	fArr.add(strawberry);

	newObj.set("fruits", fArr);

	std::stringstream os;
	//Poco::JSON::Stringifier::stringify(newObj, os);
	newObj.stringify(os);
	std::cout << os.str() << std::endl;
	
	return 0;
}
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值