// 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 的练习的更多相关文章

  1. RapidJSON v1.1.0 发布简介

    时隔 15.6 个月,终于发布了一个新版本 v1.1.0. 新版本除了包含了这些日子收集到的无数的小改进及 bug fixes,也有一些新功能.本文尝试从使用者的角度,简单介绍一下这些功能和沿由. P ...

  2. RapidJSON 代码剖析(四):优化 Grisu

    我曾经在知乎的一个答案里谈及到 V8 引擎里实现了 Grisu 算法,我先引用该文的内容简单介绍 Grisu.然后,再谈及 RapidJSON 对它做了的几个底层优化. (配图中的<Grisù& ...

  3. RapidJSON 代码剖析(三):Unicode 的编码与解码

    根据 RFC-7159: 8.1 Character Encoding JSON text SHALL be encoded in UTF-8, UTF-16, or UTF-32. The defa ...

  4. RapidJSON 代码剖析(二):使用 SSE4.2 优化字符串扫描

    现在的 CPU 都提供了单指令流多数据流(single instruction multiple data, SIMD)指令集.最常见的是用于大量的浮点数计算,但其实也可以用在文字处理方面. 其中,S ...

  5. RapidJSON 代码剖析(一):混合任意类型的堆栈

    大家好,这个专栏会分析 RapidJSON (中文使用手册)中一些有趣的 C++ 代码,希望对读者有所裨益. C++ 语法解说 我们先来看一行代码(document.h): bool StartArr ...

  6. RapidJson读取json文档

    Json格式定义如下 Object: { _Name:_Data,... } 最后一项后面没有逗号 Array: [_Data,_Data,...] 最后一项后面没有逗号 _Name: String ...

  7. 这个东西,写C++插件的可以用到。 RapidJSON —— C++ 快速 JSON 解析器和生成器

    点这里 原文: RapidJSON —— C++ 快速 JSON 解析器和生成器 时间 2015-04-05 07:33:33  开源中国新闻原文  http://www.oschina.net/p/ ...

  8. Cocos2d-x移植到WindowsPhone8移植问题-框架rapidjson移植问题

    Cocos2d-x 3.0提供了JSON框架rapidjson可以在Windows Phone 8平台使用,如果没有进行必要的配置,在编译的时候会报错,document.h等头文件找不到的错误.在Wi ...

  9. cocos2d-x3.x使用rapidjson

    rapidjson效率高,所以之前cocostudio里面解析用的jsoncpp也换成了rapidjson. 引擎又带有rapidjson库,所以不用单独去下载,直接就可以用. 这里主要写一下关于解析 ...

  10. cocos2dx 3.2 定义自己使用rapidjson阅读json数据

    一.说明 我在这里得到的只是一个简单的定义string和Int种类,其他数据类型可以被替换向上. 两.头文件 class JsonReadUtils { public: static JsonRead ...

随机推荐

  1. redux & react-redux

    在vue中,可以使用vuex进行数据管理,在react中,可以使用redux进行数据管理.redux主要由Store.Reducer和Action组成: Store:状态载体,访问状态.提交状态.监听 ...

  2. python学习笔记之四-多进程&多线程&异步非阻塞

    ProcessPoolExecutor对multiprocessing进行了高级抽象,暴露出简单的统一接口. 异步非阻塞 爬虫 对于异步IO请求的本质则是[非阻塞Socket]+[IO多路复用]: & ...

  3. 一些恶作剧的vbs程序代码

    恶作剧的vbs代码,这里提供的都是一些死循环或导致系统死机的vbs对机器没坏处,最多关机重启一下就可以了,将下面的任意一段代码保存为*.vbs即可 循环弹窗: do msgbox "hi&q ...

  4. 爬取WX小程序的数据

    方法一: 使用TBS工具,调试跟踪获取URL https://x5.tencent.com/tbs/guide/debug/download.html https://x5.tencent.com/t ...

  5. php 对象转字符串

    $json_string = json_encode($object, JSON_FORCE_OBJECT); json_encode($object); //结果:"[{"aa& ...

  6. Oracle 循环查询

    select * from sys_department start with departmentid = '0303e461-2454-4d5a-bfea-2cd5a4c064c6' connec ...

  7. jdbc与TiDB数据库交互的过程

    以下是使用jdbc操作TiDB数据库,得到的交互过程和指令的说明 ==>代表发送给数据库的指令 // 加载驱动程序Class.forName(driver); // 连接数据库 Connecti ...

  8. ssh服务器配置

    使用如下终端命令可以在 Linux 主机中安装 ssh服务器sudo apt-get install openssh-server lin@lin-machine:~$ sudo apt-get in ...

  9. 制造业期刊-ZT

    小虫一名英国博后,前阵发书,认识了很多机械制造领域的伙伴.得知我录用了多篇顶刊后,很多人私聊我求经验. 哎,哪里那么容易.回想过去5年,制造领域的期刊基本都被拒过一圈.当年自己投稿时就发现,制造顶刊的 ...

  10. python 的类装饰器

    我们都知道python的函数有装饰器,那么类也有装饰器吗?有的,为什么没有呢,来看下代码吧 def out(args): def inner(cls): cls._args = args return ...