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 }
运行截图:
作 者: itdef
欢迎转帖 请保持文本完整并注明出处
技术博客 http://www.cnblogs.com/itdef/
B站算法视频题解
https://space.bilibili.com/18508846
qq 151435887
gitee https://gitee.com/def/
欢迎c c++ 算法爱好者 windows驱动爱好者 服务器程序员沟通交流
如果觉得不错,欢迎点赞,你的鼓励就是我的动力
欢迎转帖 请保持文本完整并注明出处
技术博客 http://www.cnblogs.com/itdef/
B站算法视频题解
https://space.bilibili.com/18508846
qq 151435887
gitee https://gitee.com/def/
欢迎c c++ 算法爱好者 windows驱动爱好者 服务器程序员沟通交流
如果觉得不错,欢迎点赞,你的鼓励就是我的动力
![阿里打赏](https://files.cnblogs.com/files/itdef/ali2.bmp)
![微信打赏](https://files.cnblogs.com/files/itdef/weixin2.bmp)