加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

rapidjson的使用

发布时间:2020-12-16 18:58:20 所属栏目:百科 来源:网络整理
导读:rapidjson用来解析和生成json数据 1、解析json数据 json数据如下图 { " FlgStatus ": "sample string 1" ," OrderNo ": true ," CustomerContactID ": 123.45 ," CouponType ": 1233435454 ," ordersBody ": [ { " CustomerContactID ": "sample string 1" ,

rapidjson用来解析和生成json数据
1、解析json数据
json数据如下图

{
  "FlgStatus": "sample string 1","OrderNo": true,"CustomerContactID": 123.45,"CouponType": 1233435454,"ordersBody": [ { "CustomerContactID": "sample string 1","CustomerID": false,"Provinces": 123.45,"City": 34545 },{ "CustomerContactID": "sample string 1","City": 34545 } ],"customercontact": { "CustomerContactID": "sample string 1","City": 34545 } }

解析json数据,详情见注释

#include "rapidjson/document.h" 
#include "rapidjson/prettywriter.h" 
#include "rapidjson/filestream.h" 
#include "rapidjson/stringbuffer.h" 

#define psln(x) std::cout << #x " = " << (x) << std::endl

using std::string;
    using std::ifstream;

    string  stringFromStream;
    ifstream  in;
    in.open("E://json1.json",ifstream::in);
    if (!in.is_open())
        return;
    string line;
    while (getline(in,line)) {
        stringFromStream.append(line + "n");
    }
    in.close();

    //cout << stringFromStream << endl;

    Document doc;
    doc.Parse<0>(stringFromStream.c_str());
    if (doc.HasParseError()) {
        //ParseErrorCode code = doc.GetParseError();
        psln("error");
        return;
    }

    // use values in parse result.
    Value & v = doc["FlgStatus"];
    if (v.IsString())
    {
        psln(v.GetString());
    }
    v = doc["OrderNo"];
    if (v.IsBool())
    {
        psln(v.GetBool());
    }
    v = doc["CustomerContactID"];
    if (v.IsDouble())
    {
        psln(v.GetDouble());
    }
    v = doc["CouponType"];
    if (v.IsInt())
    {
        psln(v.GetInt());
    }
    //解析array
    v = doc["ordersBody"];
    if (v.IsArray())
    {
        int len = v.Size();
        for (int i = 0; i < len; i++)
        {
            Value & value = v[i];
            if (value.IsObject())
            {
                if (value.HasMember("CustomerContactID") && value["CustomerContactID"].IsString())
                {
                    psln(value["CustomerContactID"].GetString());
                }
                if (value.HasMember("CustomerID") && value["CustomerID"].IsBool())
                {
                    psln(value["CustomerID"].GetBool());
                }
                if (value.HasMember("Provinces") && value["Provinces"].IsDouble())
                {
                    psln(value["Provinces"].GetDouble());
                }
                if (value.HasMember("City") && value["City"].IsInt())
                {
                    psln(value["City"].GetInt());
                }
            }
        }
    }
    //解析object
    v = doc["customercontact"];
    if (v.IsObject())
    {
        if (v.HasMember("CustomerContactID") && v["CustomerContactID"].IsString())
        {
            psln(v["CustomerContactID"].GetString());
        }
        if (v.HasMember("CustomerID") && v["CustomerID"].IsBool())
        {
            psln(v["CustomerID"].GetBool());
        }
        if (v.HasMember("Provinces") && v["Provinces"].IsDouble())
        {
            psln(v["Provinces"].GetDouble());
        }
        if (v.HasMember("City") && v["City"].IsInt())
        {
            psln(v["City"].GetInt());
        }
    }

2、生成json数据,格式和上面一样

Document document;
    Document::AllocatorType& allocatorType = document.GetAllocator();
    Value root(kObjectType);

    //添加string数据
    Value FlgStatus="sample string 1";
    root.AddMember("FlgStatus",FlgStatus,allocatorType);
    //添加bool
    Value OrderNo=true;
    root.AddMember("OrderNo",OrderNo,allocatorType);
    //添加int
    Value CustomerContactID=123;
    root.AddMember("CustomerContactID",CustomerContactID,allocatorType);
    //添加double
    Value CouponType = 123.456;
    root.AddMember("CouponType",CouponType,allocatorType);
    //添加array
    Value ordersBody(kArrayType);
    for (int i = 0; i < 2; i++)
    {
        Value v(kObjectType);

        Value CustomerContactID = "sample string 1";
        v.AddMember("CustomerContactID",allocatorType);
        Value CustomerID = false;
        v.AddMember("CustomerID",CustomerID,allocatorType);
        Value Provinces = 123.45;
        v.AddMember("Provinces",Provinces,allocatorType);
        Value City = 34545;
        v.AddMember("City",City,allocatorType);

        ordersBody.PushBack(v,allocatorType);
    }
    root.AddMember("ordersBody",ordersBody,allocatorType);

    //添加object数据
    Value customercontact(kObjectType);
    Value CustomerContactID1 = "sample string 1";
    customercontact.AddMember("CustomerContactID",CustomerContactID1,allocatorType);
    Value CustomerID = false;
    customercontact.AddMember("CustomerID",allocatorType);
    Value Provinces = 123.45;
    customercontact.AddMember("Provinces",allocatorType);
    Value City = 34545;
    customercontact.AddMember("City",allocatorType);
    root.AddMember("customercontact",customercontact,allocatorType);


    StringBuffer stringBuffer;
    Writer<StringBuffer> writer(stringBuffer);
    root.Accept(writer);
    std::string result = stringBuffer.GetString();
    cout << "result: " << result.c_str() << "..........:" << result.size() << endl;

    ofstream outfile("E://json2.json");
    outfile << result.c_str() << endl;
    outfile.close();

更多详细教程

项目下载地址

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读