三個例子:第一個是解析一個簡單的 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