rapidjson解析嵌套json和生成嵌套json

首先准备我们要的头文件

rapidjson/document.h"
rapidjson/writer.h"  
rapidjson/stringbuffer.h"  

using namespace rapidjson;

现在我们解析一个这样的嵌套json:

{
    "code": 0,
    "count": 1,
    "data": [
        {
            "batch_id": 1,
            "batch_name": "GF052501",
            "batch_grade": "AAA",
            "defect_desc": "毛丝:16(5.56%);成型:4(1.39%);油污:3(1.04%);绊丝:2(0.69%)",
            "total_count": 10200,
            "defect_count": 12,
            "defect_grade": {
                “AA”: 2,
                “A”: 3
            }
        }
    ]
}

方法如下:

        Document doc;
        std::string json;    
        json = CStringUtil::Utf8ToAscii(我们的json字符串);
        
        //string转json
        if (!doc.Parse(json.data()).HasParseError())
        {
            if (doc.HasMember("data") 
                && doc["data"].IsObject()
                && !doc["data"].IsNull())
            {
                const rapidjson::Value& object = doc["data"];
                BatchRecord    batch;
    
                if (object.HasMember("total_count") && object["total_count"].IsInt())
                {
                    batch.totalCount = object["total_count"].GetInt();
                }
                if (object.HasMember("defect_count") && object["defect_count"].IsInt())
                {
                    batch.defectCount = object["defect_count"].GetInt();
                }

                //嵌套部分

                if (object.HasMember("defect_grade")
                    && object["defect_grade"].IsObject()
                    && !object["defect_grade"].IsNull()) {
                    const rapidjson::Value& gradeObj = object["defect_grade"];
                    if (gradeObj.HasMember("AA") && gradeObj["AA"].IsInt()){
                        batch.AACount = gradeObj["AA"].GetInt();
                    }
                    if (gradeObj.HasMember("A") && gradeObj["A"].IsInt()) {
                        batch.ACount = gradeObj["A"].GetInt();
                    }
                    if (gradeObj.HasMember("B") && gradeObj["B"].IsInt()) {
                        batch.BCount = gradeObj["B"].GetInt();
                    }
                    if (gradeObj.HasMember("C") && gradeObj["C"].IsInt()) {
                        batch.OtherCount = gradeObj["C"].GetInt();
                    }
                }
            }
        }

生成嵌套json,要生成的json如下:

/* 字符串转json */

{
    "code": 0,
    "count": 3,
    "data": [
        {
            "id": 1,
            "name": "早班",
            "time": "23:00-07:00"
        },
        {
            "id": 2,
            "name": "中班",
            "time": "07:00-15:00"
        },
        {
            "id": 3,
            "name": "晚班",
            "time": "15:00-23:00"
        }
    ]
}

生成方法如下:实际上里面可以在嵌套一层,只要调用好array2和array的关系

rapidjson/document.h
string-util.h
#include <QTextCodec>

 


        CDynProtoValue reply;
        CDynProtoValue::Object& replyObj = reply.GetAsObject();
        auto &array = replyObj["name"].GetAsArray();
        array.resize(listSchedule.size());
        auto &array2 = replyObj["time"].GetAsArray();
        array2.resize(listSchedule.size());

        //组装body数组
        int j = 0;
        for (auto iter = listSchedule.begin(); iter != listSchedule.end(); iter++)
        {
            string strNameOne = iter->name;
            string strdateOne = iter->date;

            strNameOne = CStringUtil::AsciiToUtf8(strNameOne);
            strdateOne = CStringUtil::AsciiToUtf8(strdateOne);
            
            array[j] = strNameOne;
            array2[j] = strdateOne;
            j++;
        }

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值