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 2017-10-23 09:57  itdef  阅读(203)  评论(0编辑  收藏  举报

导航