rapidjson 的练习

复制代码
  1 // JsonCpp.cpp: 定义控制台应用程序的入口点。
  2 //
  3 
  4 #include "stdafx.h"
  5 #include <string>
  6 #include <iostream>
  7 #include "rapidjson/writer.h"
  8 #include "rapidjson/stringbuffer.h"
  9 #include "rapidjson/document.h"
 10 
 11 //json 使用练习
 12 //代码来自 http://www.cnblogs.com/qicosmos/p/3805156.html
 13 class JsonCpp {
 14     typedef rapidjson::Writer<rapidjson::StringBuffer> JsonWriter;
 15 public:
 16     JsonCpp() :m_writer(m_buf) {}
 17     ~JsonCpp() {}
 18     void WriteArrayKey(std::string Key) {
 19         m_writer.Key(Key.c_str());
 20     }
 21     void StartArray() {
 22         m_writer.StartArray();
 23     }
 24     
 25     void EndArray() {
 26         m_writer.EndArray();
 27     }
 28 
 29     void StartObject()
 30     {
 31         m_writer.StartObject();
 32     }
 33 
 34     void EndObject()
 35     {
 36         m_writer.EndObject();
 37     }
 38 
 39     template<typename T>
 40     void WriteJson(std::string& key, T&& value) {
 41         m_writer.Key(Key.c_str());
 42         WriteValue(std::forward<T>(value));
 43     }
 44 
 45     template<typename T>
 46     void WriteJson(const char* key, T&& value) {
 47         m_writer.String(key);
 48         WriteValue(std::forward<T>(value));
 49     }
 50 
 51     const char* GetString()const {
 52         return m_buf.GetString();
 53     }
 54 private:
 55     template<typename V>
 56     typename std::enable_if<std::is_same<V, int>::value>::type WriteValue(V value)
 57     {
 58         m_writer.Int(value);
 59     }
 60 
 61     template<typename V>
 62     typename std::enable_if<std::is_same<V, unsigned int>::value>::type WriteValue(V value)
 63     {
 64         m_writer.Uint(value);
 65     }
 66 
 67     template<typename V>
 68     typename std::enable_if<std::is_same<V, int64_t>::value>::type WriteValue(V value)
 69     {
 70         m_writer.Int64(value);
 71     }
 72 
 73     template<typename V>
 74     typename std::enable_if<std::is_floating_point<V>::value>::type WriteValue(V value)
 75     {
 76         m_writer.Double(value);
 77     }
 78 
 79     template<typename V>
 80     typename std::enable_if<std::is_same<V, bool>::value>::type WriteValue(V value)
 81     {
 82         m_writer.Bool(value);
 83     }
 84 
 85     template<typename V>
 86     typename std::enable_if<std::is_pointer<V>::value>::type WriteValue(V value)
 87     {
 88         m_writer.String(value);
 89     }
 90 
 91     template<typename V>
 92     typename std::enable_if<std::is_array<V>::value>::type WriteValue(V value)
 93     {
 94         m_writer.String(value);
 95     }
 96 
 97     template<typename V>
 98     typename std::enable_if<std::is_same<V, std::nullptr_t>::value>::type WriteValue(V value)
 99     {
100         m_writer.Null();
101     }
102 
103 private:
104     rapidjson::StringBuffer m_buf;
105     JsonWriter m_writer;
106     rapidjson::Document m_doc;
107 };
108 
109 
110 void test() {
111     JsonCpp j;
112     j.StartObject();
113     j.WriteJson("i",1234);
114     j.WriteJson("d", 3.14153);
115     j.WriteJson("username","nameNothing");
116     j.WriteJson("bool", true);
117     j.WriteJson("bool", false);
118     j.WriteJson("null", nullptr);
119     j.WriteJson("null", NULL);
120     j.WriteArrayKey("arrayStart");
121     j.StartArray();
122     j.WriteJson("bool",true);
123     j.WriteJson("bool", false);
124     j.WriteJson("null", nullptr);
125     j.WriteJson("null", NULL);
126     j.WriteJson("i", 1);
127     j.WriteJson("i", 2);
128     j.WriteJson("i", 3);
129     j.EndArray();
130     j.WriteJson("end","jsonStringEnd");
131     j.EndObject();
132     std::cout << j.GetString() << std::endl;
133 }
134 
135 int main()
136 {
137     test();
138     return 0;
139 }
复制代码

 运行截图:

 

posted on   itdef  阅读(205)  评论(0编辑  收藏  举报

编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示