码迷,mamicode.com
首页 > 编程语言 > 详细

c++ rapidjson读取json文件 解析

时间:2019-06-29 09:12:14      阅读:320      评论:0      收藏:0      [点我收藏+]

标签:etc   error   control   using   stringbu   numbers   name   file   移动   

 

#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文件 解析

标签:etc   error   control   using   stringbu   numbers   name   file   移动   

原文地址:https://www.cnblogs.com/sea-stream/p/11105387.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!