三个例子:第一个是解析一个简单的 json。第二个是在构造一个 json 对象并且加入数据。第三个是解析带数组的 json对象。
这三个场景基本上满足大部分需求了。
#include<iostream>
#include <stdint.h>
#include <sstream>
#include "Poco/JSON/Parser.h"
#include "Poco/JSON/ParseHandler.h"
#include "Poco/JSON/JSONException.h"
#include "Poco/StreamCopier.h"
#include "Poco/Dynamic/Var.h"
#include "Poco/JSON/Query.h"
#include "Poco/JSON/PrintHandler.h"
using namespace Poco::Dynamic;
using namespace Poco;
using std::string;
// json 的简单示例。
void JsonGet( )
{
string jsonString = "{ \"name\" : \"yuhaiyang\" }";
JSON::Parser parser;
Dynamic::Var result;
parser.reset();
result = parser.parse( jsonString );
JSON::Object::Ptr pObj = result.extract<JSON::Object::Ptr>();
Dynamic::Var ret = pObj->get( "name2" );
if ( ret.isEmpty() )
{
std::cout << "is null" << std::endl;
}else
{
std::cout << ret.toString() << std::endl;
}
}
//在 json 里加入数组。
void JsonArry( void )
{
JSON::Object jsnObj;
JSON::Array jsnArry;
JSON::Object subObj1;
JSON::Object subObj2;
jsnObj.set( "command", "createuser" );
subObj1.set( "name", "yuhaiyang");
subObj1.set( "pass", "123" );
subObj2.set( "name", "cj" );
subObj2.set( "pass", "456" );
jsnArry.add( subObj1 );
jsnArry.add( subObj2 );
jsnObj.set( "userinfo", jsnArry );
std::stringstream jsnString;
jsnObj.stringify( jsnString, 3 );
std::cout << jsnString.str() << std::endl;
}
//解析数据
void JsonGetArry( void )
{
/*-------------------构造包含Array的JSON(string类型)--------------------------------*/
JSON::Object jsnObj;
JSON::Array jsnArry;
JSON::Object subObj1;
JSON::Object subObj2;
jsnObj.set( "command", "createuser" );
subObj1.set( "name", "yuhaiyang");
subObj1.set( "pass", "123" );
subObj2.set( "name", "cj" );
subObj2.set( "pass", "456" );
jsnArry.add( subObj1 );
jsnArry.add( subObj2 );
jsnObj.set( "userinfo", jsnArry );
std::stringstream jsnOstream;
jsnObj.stringify( jsnOstream, 3 );
string jsnStr = jsnOstream.str();
std::cout << "原数据:\n" << jsnStr << "\n\n\n" << std::endl;
//--------------------------解析数组-----------------------------
JSON::Parser parse;
Dynamic::Var json = parse.parse( jsnStr );
JSON::Object::Ptr pObj = json.extract<JSON::Object::Ptr>();
JSON::Array::Ptr pArry = pObj->getArray( "userinfo" );
JSON::Array::ConstIterator it = pArry->begin();
//把数组里的所有内容打印出来
//当然也可以把每个对象拿出来用。
for ( ; it != pArry->end(); it++ )
{
std::cout << it->toString() << std::endl;
}
}
int main()
{
JsonGet();
JsonArry();
JsonGetArry();
}
另外 get() 返回的 Dynamic::Var 类型可以通过 convert() 来转换为你想要的类型.
poco 交流群: 386220502