rapidjson 使用教程
在cocos2d-x引入了rapidjson,它处理速度比其他的json库快,反正不管了,我们这边只是学习下如何使用。rapidjson官方网址: https://code.google.com/p/rapidjson/wiki/UserGuide,上面有wiki有部分说明文档,可以看下。
github仓库地址:https://github.com/miloyip/rapidjson
下面我们讲讲rapidjson读写文件。
直接贴代码:
TestJson.h
#ifndef _TEST_JSON_H_
#define _TEST_JSON_H_ #include "json/document.h"
using namespace std;
class TestJson
{
public:
TestJson(void);
~TestJson(void);
//读取文件
void readFile( const char * fileName );
//添加字符串成员
void addStrMenber(const char *key,const char *value);
//是否存在成员
bool hasMenber(const char *key);
//删除成员
void removeMenber(const char *key);
//写入文件
bool writeFile( const char * fileName ); private:
rapidjson::Document _jsonDocument;
};
#endif
TestJson.cpp
#include "TestJson.h"
#include <stdio.h>
#include "json/filestream.h"
#include "json/stringbuffer.h"
#include "json/writer.h"
TestJson::TestJson(void)
{
} TestJson::~TestJson(void)
{
} void TestJson::readFile( const char * fileName )
{
if (fileName == nullptr) return;
FILE * pFile = fopen (fileName , "r");
if(pFile){
//读取文件进行解析成json
rapidjson::FileStream inputStream(pFile);
_jsonDocument.ParseStream<>(inputStream);
fclose(pFile);
}
if(!_jsonDocument.IsObject()){
_jsonDocument.SetObject();
}
} void TestJson::addStrMenber(const char *key,const char *value)
{
rapidjson::Value strValue(rapidjson::kStringType);
strValue.SetString(value,_jsonDocument.GetAllocator());
_jsonDocument.AddMember(key,strValue,_jsonDocument.GetAllocator());
} bool TestJson::hasMenber(const char *key)
{
if (_jsonDocument.HasMember(key)) {
return true;
}
return false;
} void TestJson::removeMenber(const char *key)
{
if (_jsonDocument.HasMember(key)) {
_jsonDocument.RemoveMember(key);
}
} bool TestJson::writeFile( const char * fileName )
{
if (fileName == nullptr) return false;
//转为字符串格式
rapidjson::StringBuffer buffer;
rapidjson::Writer< rapidjson::StringBuffer > writer(buffer);
_jsonDocument.Accept(writer);
const char* str = buffer.GetString();
FILE * pFile = fopen (fileName , "w");
if (!pFile) return false;
fwrite(str,sizeof(char),strlen(str),pFile);
fclose(pFile);
return true;
}
rapidjson 使用教程的更多相关文章
- rapidjson使用总结
Reference: https://blog.csdn.net/elloop/article/details/49908689 rapidjson简介 rapidjson是腾讯的开源json解析框 ...
- Rapidjson的简单使用示例
很早就想用用Markdown了,一直没机会.今天就来试一下 先放个目录: Rapidjson的简单使用示例 rapidjson官方教程 本示例所用环境 示例代码与注释 rapidjson官方教程 如果 ...
- RapidJSON v1.1.0 发布简介
时隔 15.6 个月,终于发布了一个新版本 v1.1.0. 新版本除了包含了这些日子收集到的无数的小改进及 bug fixes,也有一些新功能.本文尝试从使用者的角度,简单介绍一下这些功能和沿由. P ...
- RapidJSON 1.0 正式版发布,C++的JSON开发包
分享 <关于我> 分享 [中文纪录片]互联网时代 http://pan.baidu.com/s/1qWkJfcS 分享 <HTML开发MacOSAp ...
- Navicat 激活教程2021(Linux)
Navicat 激活教程2021(Linux) 目录 背景 环境 激活 清理 使用 背景 Navicat 是香港卓软数字科技有限公司生产的一系列 MySQL.MariaDB.MongoDB.Oracl ...
- Angular2入门系列教程7-HTTP(一)-使用Angular2自带的http进行网络请求
上一篇:Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数 感觉这篇不是很好写,因为涉及到网络请求,如果采用真实的网络请求,这个例子大家拿到手估计还要自己写一个web ...
- Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数
上一篇:Angular2入门系列教程5-路由(一)-使用简单的路由并在在路由中传递参数 之前介绍了简单的路由以及传参,这篇文章我们将要学习复杂一些的路由以及传递其他附加参数.一个好的路由系统可以使我们 ...
- Angular2入门系列教程5-路由(一)-使用简单的路由并在在路由中传递参数
上一篇:Angular2入门系列教程-服务 上一篇文章我们将Angular2的数据服务分离出来,学习了Angular2的依赖注入,这篇文章我们将要学习Angualr2的路由 为了编写样式方便,我们这篇 ...
- Angular2入门系列教程4-服务
上一篇文章 Angular2入门系列教程-多个组件,主从关系 在编程中,我们通常会将数据提供单独分离出来,以免在编写程序的过程中反复复制粘贴数据请求的代码 Angular2中提供了依赖注入的概念,使得 ...
随机推荐
- HDU 1495 非常可乐 BFS
题目大意:中文题不说了. 题目思路:我有同学用GCD数论写出来的代码很简洁,但是很抱歉,数论蒟蒻,我觉得比赛的时候我没办法推出.如果用BFS的话思路很简单的,就是6方向广搜,只不过稍微麻烦点.具体看代 ...
- myeclipse 2013 SR2 安装svn
1.下载SVN-site-1.8.22.zip 2.找到MyEclipse安装路径 我的是F:\tool\myeclipse2013\dropins,复制SVN-site-1.8.22.zip到此文件 ...
- 简易控制中心,angular的简单使用
<html> <head> <meta charset='utf-8'> <script src="js/angular.js">& ...
- sql 指定范围 获取随机数
DECLARE @nMinimumCount INT= 1DECLARE @nMaximumCount INT= 100SELECT abs(CHECKSUM(NEWID()))%(@nMaximum ...
- ACM暑期训练总结
ACM暑期集训总结报告 不知不觉,ACM暑期集训已经过去了一个月了(其实我还差几天才够一个月,因为最后几天要回家办助学贷款,所以没坚持到最后,当了个逃兵.....[汗])也到了结束的时候.在这一个月中 ...
- UVA - 12563 Jin Ge Jin Qu hao (01背包变形)
此题应该注意两个点,首先背包容量应该缩减为t-1,因为最长的歌不超过三分钟,而劲歌金曲有678s,所以肯定要留出这个时间来.其次注意优先级,保证唱的歌曲数目最多,在此前提下尽可能的延长时间. 处理方法 ...
- android 内存优化一
常见内存泄露原因 Context对象泄漏 1.如果一个类持有Context对象的强引用,就需要检查其生存周期是否比Context对象更长.否则就可能发生Context泄漏. 2.View持有其创建所在 ...
- 转:Linux基本命令大全
Linux基本命令大全 新手刚刚接触Linux的时候可能处处感到不便,不过没有关系,接触新的事物都有这样的一个过程,在你用过Linux一段时间后,你就会逐渐了解Linux其实和Windows一样容 ...
- 提升html5的性能体验系列之三流畅下拉刷新
下拉刷新 为实现下拉刷新功能,大多H5框架都是通过DIV模拟下拉回弹动画,在低端android手机(Android4.4以下)上,DIV动画经常出现卡顿现象(特别是图文列表的情况).解决方案还是web ...
- Entity Framework 学习中级篇1—EF支持复杂类型的实现
本节,将介绍如何手动构造复杂类型(ComplexType)以及复杂类型的简单操作. 通常,复杂类型是指那些由几个简单的类型组合而成的类型.比如:一张Customer表,其中有FristName和Las ...