C++之RapidJSON解析json数据
线上幽灵 2019-05-26 10:20:15
————————————————
版权声明:本文为CSDN博主「线上幽灵」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/chen134225/article/details/90573407
RapidJSON
是一个 C++ 的 JSON 解析器及生成器。
"name": "xiaoming"
,
"gender": "boy"
,
"hobby": ["足球", "篮球", "电影"
],
"socre"
: {
"数学": 91.5
,
"英语": 96.0
,
"语文": 95.5
"lover"
: {
"name": "xiaohong"
,
"gender": "girl"
,
"hobby": ["画画", "跳舞", "唱歌"
],
"score"
: {
"数学": 78.5
,
"英语": 90.0
,
"语文": 89.0
由于复制的过程中,json文本可以出现错误,可以用将json文本复制到
JSON在线编辑器
验证一下。
解析代码:
#include<string>
#include<fstream>
#include<iostream>
#include"document.h"
using namespace std;
int main () {
std::ifstream t("./document.json");
std::string str((std::istreambuf_iterator<char>(t)),
std::istreambuf_iterator<char>());
rapidjson::Document document;
document.Parse(str.c_str());
rapidjson::Value::ConstMemberIterator iter = document.FindMember("name");
if(iter != document.MemberEnd()){
cout << "name : " << iter->value.GetString() << endl;
iter = document.FindMember("gender");
if(iter != document.MemberEnd()){
cout << "gender : " << iter->value.GetString() << endl;
if(document.HasMember("hobby")){
cout << "hobby : " << endl;
const rapidjson::Value& childValue = document["hobby"];
for(rapidjson::SizeType i = 0; i < childValue.Size(); ++i){
cout << " " << childValue[i].GetString() << endl;
if(document.HasMember("score")){
cout << "score : " << endl;
const rapidjson::Value& childIter = document["score"];
for(rapidjson::Value::ConstMemberIterator it = childIter.MemberBegin(); it != childIter.MemberEnd(); ++it){
cout << " " << it->name.GetString() << " : " << it->value.GetDouble() << endl;
if(document.HasMember("lover")){
cout << "lover : " << endl;
const rapidjson::Value& chileValue = document["lover"];
rapidjson::Value::ConstMemberIterator chileIter = chileValue.FindMember("name");
if(chileIter != chileValue.MemberEnd()){
cout << " " << "name : " << chileIter->value.GetString() << endl;
chileIter = chileValue.FindMember("gender");
if(chileIter != chileValue.MemberEnd()){
cout << " " << "gender : " << chileIter->value.GetString() << endl;
if(chileValue.HasMember("hobby")){
cout << " " << "hobby : " << endl;
const rapidjson::Value& chile2Value = chileValue["hobby"];
for(rapidjson::SizeType i = 0; i < chile2Value.Size(); ++i){
cout << " " << chile2Value[i].GetString() << endl;
if(chileValue.HasMember("score")){
cout << " " << "score : " << endl;
const rapidjson::Value& child2Iter = chileValue["score"];
for(rapidjson::Value::ConstMemberIterator it = child2Iter.MemberBegin(); it != child2Iter.MemberEnd(); ++it){
cout << " " << it->name.GetString() << " : " << it->value.GetDouble() << endl;
输出结果: