rapidjson 的练习
// JsonCpp.cpp: 定义控制台应用程序的入口点。
// #include "stdafx.h"
#include <string>
#include <iostream>
#include "rapidjson/writer.h"
#include "rapidjson/stringbuffer.h"
#include "rapidjson/document.h" //json 使用练习
//代码来自 http://www.cnblogs.com/qicosmos/p/3805156.html
class JsonCpp {
typedef rapidjson::Writer<rapidjson::StringBuffer> JsonWriter;
public:
JsonCpp() :m_writer(m_buf) {}
~JsonCpp() {}
void WriteArrayKey(std::string Key) {
m_writer.Key(Key.c_str());
}
void StartArray() {
m_writer.StartArray();
} void EndArray() {
m_writer.EndArray();
} void StartObject()
{
m_writer.StartObject();
} void EndObject()
{
m_writer.EndObject();
} template<typename T>
void WriteJson(std::string& key, T&& value) {
m_writer.Key(Key.c_str());
WriteValue(std::forward<T>(value));
} template<typename T>
void WriteJson(const char* key, T&& value) {
m_writer.String(key);
WriteValue(std::forward<T>(value));
} const char* GetString()const {
return m_buf.GetString();
}
private:
template<typename V>
typename std::enable_if<std::is_same<V, int>::value>::type WriteValue(V value)
{
m_writer.Int(value);
} template<typename V>
typename std::enable_if<std::is_same<V, unsigned int>::value>::type WriteValue(V value)
{
m_writer.Uint(value);
} template<typename V>
typename std::enable_if<std::is_same<V, int64_t>::value>::type WriteValue(V value)
{
m_writer.Int64(value);
} template<typename V>
typename std::enable_if<std::is_floating_point<V>::value>::type WriteValue(V value)
{
m_writer.Double(value);
} template<typename V>
typename std::enable_if<std::is_same<V, bool>::value>::type WriteValue(V value)
{
m_writer.Bool(value);
} template<typename V>
typename std::enable_if<std::is_pointer<V>::value>::type WriteValue(V value)
{
m_writer.String(value);
} template<typename V>
typename std::enable_if<std::is_array<V>::value>::type WriteValue(V value)
{
m_writer.String(value);
} template<typename V>
typename std::enable_if<std::is_same<V, std::nullptr_t>::value>::type WriteValue(V value)
{
m_writer.Null();
} private:
rapidjson::StringBuffer m_buf;
JsonWriter m_writer;
rapidjson::Document m_doc;
}; void test() {
JsonCpp j;
j.StartObject();
j.WriteJson("i",);
j.WriteJson("d", 3.14153);
j.WriteJson("username","nameNothing");
j.WriteJson("bool", true);
j.WriteJson("bool", false);
j.WriteJson("null", nullptr);
j.WriteJson("null", NULL);
j.WriteArrayKey("arrayStart");
j.StartArray();
j.WriteJson("bool",true);
j.WriteJson("bool", false);
j.WriteJson("null", nullptr);
j.WriteJson("null", NULL);
j.WriteJson("i", );
j.WriteJson("i", );
j.WriteJson("i", );
j.EndArray();
j.WriteJson("end","jsonStringEnd");
j.EndObject();
std::cout << j.GetString() << std::endl;
} int main()
{
test();
return ;
}
运行截图:

rapidjson 的练习的更多相关文章
- RapidJSON v1.1.0 发布简介
时隔 15.6 个月,终于发布了一个新版本 v1.1.0. 新版本除了包含了这些日子收集到的无数的小改进及 bug fixes,也有一些新功能.本文尝试从使用者的角度,简单介绍一下这些功能和沿由. P ...
- RapidJSON 代码剖析(四):优化 Grisu
我曾经在知乎的一个答案里谈及到 V8 引擎里实现了 Grisu 算法,我先引用该文的内容简单介绍 Grisu.然后,再谈及 RapidJSON 对它做了的几个底层优化. (配图中的<Grisù& ...
- RapidJSON 代码剖析(三):Unicode 的编码与解码
根据 RFC-7159: 8.1 Character Encoding JSON text SHALL be encoded in UTF-8, UTF-16, or UTF-32. The defa ...
- RapidJSON 代码剖析(二):使用 SSE4.2 优化字符串扫描
现在的 CPU 都提供了单指令流多数据流(single instruction multiple data, SIMD)指令集.最常见的是用于大量的浮点数计算,但其实也可以用在文字处理方面. 其中,S ...
- RapidJSON 代码剖析(一):混合任意类型的堆栈
大家好,这个专栏会分析 RapidJSON (中文使用手册)中一些有趣的 C++ 代码,希望对读者有所裨益. C++ 语法解说 我们先来看一行代码(document.h): bool StartArr ...
- RapidJson读取json文档
Json格式定义如下 Object: { _Name:_Data,... } 最后一项后面没有逗号 Array: [_Data,_Data,...] 最后一项后面没有逗号 _Name: String ...
- 这个东西,写C++插件的可以用到。 RapidJSON —— C++ 快速 JSON 解析器和生成器
点这里 原文: RapidJSON —— C++ 快速 JSON 解析器和生成器 时间 2015-04-05 07:33:33 开源中国新闻原文 http://www.oschina.net/p/ ...
- Cocos2d-x移植到WindowsPhone8移植问题-框架rapidjson移植问题
Cocos2d-x 3.0提供了JSON框架rapidjson可以在Windows Phone 8平台使用,如果没有进行必要的配置,在编译的时候会报错,document.h等头文件找不到的错误.在Wi ...
- cocos2d-x3.x使用rapidjson
rapidjson效率高,所以之前cocostudio里面解析用的jsoncpp也换成了rapidjson. 引擎又带有rapidjson库,所以不用单独去下载,直接就可以用. 这里主要写一下关于解析 ...
- cocos2dx 3.2 定义自己使用rapidjson阅读json数据
一.说明 我在这里得到的只是一个简单的定义string和Int种类,其他数据类型可以被替换向上. 两.头文件 class JsonReadUtils { public: static JsonRead ...
随机推荐
- C++类中this指针的理解
先要理解class的意思.class应该理解为一种类型,象int,char一样,是用户自定义的类型.用这个类型可以来声明一个变量,比如int x, myclass my等等.这样就像变量x具有int类 ...
- SpringMVC复习
第一天 springmvc.xml 一个配置文件,SpringMVC本身就是Spring的子项目,对Spring兼容性很好,不需要做很多配置. 这里只配置一个Controller扫描就可以了,让Spr ...
- html5 + shiro
偶然与巧合 舞动了蝶翼 谁的心头风起 前赴而后继 万千人追寻 荒漠唯一菩提 似擦肩相遇 或擦肩而去 命运犹如险棋 无数时间线 无数可能性 终于交织向你
- 杂谈2.cpp
Ostream类定义的插入运算符(<<)使数据插入到输出流,istream定义的抽取运算符(>>)能够从输入流中抽取信息 Cin和cout都是智能对象,能够根据程序上下文将信息 ...
- 红黑树Python实现
# coding=utf-8 # 红黑树Python实现 # 颜色常量 RED = 0 BLACK = 1 def left_rotate(tree, node): if not node.right ...
- Hive 任务优化 tips
1. 集群任务队列: 一般有 root.default, root.online, root.offline, root.spark-thiftserver Hue提交的任务一般默认在 defau ...
- leetcode301
class Solution { public List<String> removeInvalidParentheses(String s) { List<String> a ...
- TP5 自定义验证器
TP内置验证功能提供两种验证方法 验证器(推荐) $validate = Validate::make([ 'id' => 'require|integer', ]); if ($validat ...
- int和Integer的自动拆箱/装箱相关问题
java中为没一种基本类型都提供相应的包装类型. byte,short,char,int,long,float,double和boolean Byte,Short,Character,Integer, ...
- python abc模块
面向对象的设计中,抽象类,接口这些必不可少的东西,在python中是如何提现的呢? python作为一个动态语言,没有强类型的检查,而是以鸭子类型的方式提现,在执行的时候python不严格要求你必须是 ...