C++學習筆記-利用rapidJSON讀取JSON資料
阿新 • • 發佈:2018-11-14
JSON檔案如下:
{
"errorCode":0,
"reason":"OK",
"result":
{"userId":10086,"name":"中國移動"},
"numbers":[110,120,119,911]
}
目錄結構如下:
程式執行截圖如下:
原始碼如下:
#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; } int main(){ string jsonstr = readfile("example.json"); //parseJSON(jsonstr.c_str()); try{ parseJSON2(jsonstr.c_str()); }catch(string e){ printf("error: %s \n", e.c_str()); } getchar(); return 0; }