zoukankan      html  css  js  c++  java
  • 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驱动爱好者 服务器程序员沟通交流
    如果觉得不错,欢迎点赞,你的鼓励就是我的动力
    阿里打赏 微信打赏
  • 相关阅读:
    2019 SDN上机第一次作业
    软件工程实践2019第五次作业
    软件工程实践2019第四次作业
    软件工程实践2019第三次作业
    软件工程实践2019第二次作业
    软件工程实践2019第一次作业
    第十周Java总结
    第九周课程总结&实验报告
    第八周课程总结&实验报告
    第七周课程总结&实验报告
  • 原文地址:https://www.cnblogs.com/itdef/p/7714728.html
Copyright © 2011-2022 走看看