poco JSON 的使用

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章