C++解析json

一、介绍

RapidJSON是一个C++的JSON解析器及生成器。它小而全、速度快、独立(不依赖stl、broost)、对内存友好(在大部分32/64位机器上,每个JSON值只占16位(字符串除外)、对Unicode友好(支持UTF-8、UTF-16、UTF-32)。且跨平台(支持Windows.Cygwin.MacOS.iOS.Android)
它的源码在GitHub - Tencent/rapidjson: A fast JSON parser/generator for C++ with both SAX/DOM style API

二、安装

只有头文件的C++库,只需要把include/rapidjson目录复制到系统或项目的include目录中。

三、使用

json文件

{
    "kkk": [
        0
    ], 
    "mmm": [
        94
    ], 
    "pop": [
        66, 
        91, 
        106
    ]
	
}
#include <fstream> 
#include <map> 
#include <vector> 
#include "rapidjson/document.h"
#include "rapidjson/writer.h"
#include "rapidjson/stringbuffer.h"

using namespace std;

using namespace rapidjson;

// 读取文件
string ReadFile()
{
    ifstream file;

    file.open("my.json", ios_base::in); // 我的文件名称是my.json

    if (!file.is_open())
    {
        cout << "打开失败";
    }

    stringstream ss{};
    ss << file.rdbuf();

    string str = ss.str();
    cout << str << endl;
    return str;


}


int main()
{
    map<string, vector<int>> myData;

    string json_content = ReadFile();

    rapidjson::Document document;
    document.Parse(json_content.c_str());

    for (Value::ConstMemberIterator iter = document.MemberBegin();
        iter != document.MemberEnd(); ++iter)
    {
        vector<int> ans;
        if (iter->value.IsArray()) {
            const rapidjson::Value& temp = document[iter->name.GetString()];
            for (SizeType  i = 0; i < temp.Size(); ++i) {
                ans.push_back(temp[i].GetFloat());
            }
        }
        else if (iter->value.IsInt()) {
            int temp = iter->value.GetInt();
            ans.push_back(temp);
        }

        myData[iter->name.GetString()] = ans;
    }

    system("pause");
    return 0;
}

参考:

C++ json数据解析RapidJSON库_我的小心翼翼你不懂。的博客-CSDN博客

RapidJSON简介及使用_fengbingchun的博客-CSDN博客_rapidjson

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值