C++之RapidJSON解析json

本文详细介绍了如何使用C++和rapidjson库解析JSON格式的数据,通过具体示例展示了如何读取和处理JSON中的字符串及时间信息,为开发者提供了一个实用的C++ JSON解析指南。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

{
    "name":"zhangsan",
    "learn":{
        "match":[
            {
                "start":"08:00",
                "end":"10:00"
            },
            {
                "start":"17:00",
                "end":"20:00"
            }
        ],
        "english":[
            {
                "start":"08:00",
                "end":"10:00"
            }
        ]
    }
}
#include<string>
#include<fstream>
#include<iostream>
#include"rapidjson/document.h"
#include<vector>
#include <map>

using namespace std;

int main () {

    std::string str = "{\"name\": \"zhangsan\",\"learn\": {\"match\": [{\"start\": \"08:00\",\"end\": \"10:00\"},{\"start\": \"17:00\",\"end\": \"20:00\"}],\"english\": [{\"start\": \"08:00\",\"end\": \"10:00\"}]}}";

    rapidjson::Document document;
    document.Parse(str.c_str());
    if (!document.IsObject()) {
        return -1;
    }
    auto iter = document.FindMember("name");//name
    if (iter != document.MemberEnd()) {
        cout << iter->value.GetString() << " " << typeid(iter->value.GetString()).name() << endl;//非string格式
        vector<string> s;
        s.push_back(iter->value.GetString());
        cout<<s[0]<<" "<<typeid(s[0]).name()<<endl;//string格式

    }
    if (document.HasMember("learn")) {
        const rapidjson::Value &chile2Value = document["learn"];
        if (chile2Value.HasMember("match")) {
            const rapidjson::Value &chile3Value = chile2Value["match"];//"match":[{},{}]
            for (rapidjson::SizeType i = 0; i < chile3Value.Size(); ++i) {
                std::vector<string> ss;

                auto iter = chile3Value[i].FindMember("start");
                if (iter != chile3Value[i].MemberEnd()) {
                    cout << iter->value.GetString() << endl;
                }
                iter = chile3Value[i].FindMember("end");
                if (iter != chile3Value[i].MemberEnd()) {
                    cout << iter->value.GetString() << endl;
                }

            }
        }
    }
    return 0;
}

zhangsan PKc
zhangsan NSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEE
08:00
10:00
17:00
20:00
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值