c++ rapidjson读取json文件 解析

Posted sea-stream

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++ rapidjson读取json文件 解析相关的知识,希望对你有一定的参考价值。

 

#include <iostream>
#include <string>
#include "rapidjson/document.h"
#include "rapidjson/writer.h"
#include "rapidjson/stringbuffer.h"

using namespace rapidjson;
using namespace std;

string readfile(const char *filename)
    FILE *fp = fopen(filename, "rb");
    if(!fp)
        printf("open failed! file: %s", filename);
        return "";
    
    
    char *buf = new char[1024*16];
    int n = fread(buf, 1, 1024*16, fp);
    fclose(fp);
    
    string result;
    if(n>=0)
        result.append(buf, 0, n);
    
    delete []buf;
    return result;


int parseJSON(const char *jsonstr)
    Document d;
    if(d.Parse(jsonstr).HasParseError())
        printf("parse error!\n");
        return -1;
    
    if(!d.IsObject())
        printf("should be an object!\n");
        return -1;
    
    if(d.HasMember("errorCode"))
        Value &m = d["errorCode"];
        int v = m.GetInt();
        printf("errorCode: %d\n", v);
    
    printf("show numbers: \n");
    if(d.HasMember("numbers"))
        Value &m = d["numbers"];
        if(m.IsArray())
            for(int i = 0; i < m.Size(); i++)
                Value &e = m[i];
                int n = e.GetInt();
                printf("%d,", n);
            
        
    
    return 0;


int parseJSON2(const char *jsonstr)
    Document d;
    if(d.Parse(jsonstr).HasParseError())
        throw string("parse error!\n");
    
    if(!d.IsObject())
        throw string("should be an object!\n");
    
    if(!d.HasMember("errorCode"))
        throw string("‘errorCode‘ no found!");
    
    
    Value &m = d["errorCode"];
    int v = m.GetInt();
    printf("errorCode: %d\n", v);
    printf("show numbers:\n");
    if(d.HasMember("numbers"))
        Value &m = d["numbers"];
        if(m.IsArray())
            for(int i = 0; i < m.Size(); i++)
                Value &e = m[i];
                int n = e.GetInt();
                printf("%d", n);
            
        
    
    return 0;


/*
 //path="/Users/macname/Desktop/example.json"
 
 
 "errorCode":0,
 "reason":"OK",
 "result":"userId":10086,"name":"中国移动",
 "numbers":[110,120,119,911]
 
 
 */
int main()
    
    string jsonstr = readfile("/Users/macname/Desktop/example.json");
    //parseJSON(jsonstr.c_str());
    
    try
        parseJSON2(jsonstr.c_str());
    catch(string e)
        printf("error: %s \n", e.c_str());
    
    getchar();
    return 0;

输出

errorCode: 0
show numbers:
110120119911

 

 

 

 

以上是关于c++ rapidjson读取json文件 解析的主要内容,如果未能解决你的问题,请参考以下文章

C++ rapidjson 基础入门

C++ 基于rapidjson对json字符串的进行序列化与反序列化

C/C++C++Json解析和生成的开源库:RapidJson和JsonCpp

RapidJSON解析数组

RapidJSON简介及使用

RapidJSON简介及使用