rapidjson简单应用

原创

rapidjson初级使用之封装和解析

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_31930499/article/details/79628015
            </div>
                                                <!--一个博主专栏付费入口-->
         
         <!--一个博主专栏付费入口结束-->
        <link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_views-4a3473df85.css">
                                    <link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_views-4a3473df85.css">
            <div class="htmledit_views" id="content_views">
                                        <p align="justify" style="background:rgb(255,255,255);">rapidjson超级好用,只需要包含头文件,也就是可以跨平台</p><p align="justify" style="background:rgb(255,255,255);"><span style="font-family:'宋体';">虽然写很复杂的功能的时候可能需要自己封装一些接口,但是写简单的</span>json解析完全够用了</p><p><strong>rapidjson<span style="font-family:'宋体';">封装和解析</span></strong></p><p><span style="font-family:'宋体';">不多说,直接上代码(可以忽略操作文件的步骤),代码包含多种情况的</span>json<span style="font-family:'宋体';">格式,搞清楚下面的几种格式,基本没什么问题了。</span></p><pre><code class="language-cpp hljs"><ol class="hljs-ln hundred" style="width:1101px"><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="1"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;iostream&gt;  </span></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="2"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;string&gt;  </span></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="3"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;fstream&gt;  </span></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="4"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-comment">//包含rapidjson必要头文件,rapidjson文件夹拷贝到工程目录,或者设置include路径,或者加入到工程树  </span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="5"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">"rapidjson/document.h"</span>  </span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="6"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">"rapidjson/filereadstream.h"</span> </span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="7"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">"rapidjson/filewritestream.h"</span>   </span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="8"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">"rapidjson/prettywriter.h"</span>  </span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="9"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">"rapidjson/stringbuffer.h"</span>  </span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="10"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-keyword">using</span> <span class="hljs-keyword">namespace</span> <span class="hljs-built_in">std</span>;  </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="11"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-keyword">using</span> <span class="hljs-keyword">namespace</span> rapidjson;  <span class="hljs-comment">//引入rapidjson命名空间  </span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="12"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">  </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="13"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-comment">//写json文件  </span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="14"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-function"><span class="hljs-keyword">void</span> <span class="hljs-title">json_write</span><span class="hljs-params">()</span>  </span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="15"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">{  </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="16"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    Document doc;  </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="17"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    doc.SetObject();  </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="18"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    Document::AllocatorType &amp;allocator=doc.GetAllocator(); <span class="hljs-comment">//获取分配器  </span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="19"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    <span class="hljs-comment">//1.添加字符串成员  </span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="20"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    doc.AddMember(<span class="hljs-string">"author"</span>,<span class="hljs-string">"tashaxing"</span>,allocator);   </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="21"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    <span class="hljs-comment">//2.添加数组成员  </span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="22"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    <span class="hljs-function">Value <span class="hljs-title">array1</span><span class="hljs-params">(kArrayType)</span></span>;  <span class="hljs-comment">//kArrayType 枚举成员 表示数组</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="23"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    <span class="hljs-keyword">for</span>(<span class="hljs-keyword">int</span> i=<span class="hljs-number">0</span>;i&lt;<span class="hljs-number">3</span>;i++)  </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="24"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    {  </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="25"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">        <span class="hljs-function">Value <span class="hljs-title">int_object</span><span class="hljs-params">(kObjectType)</span></span>;  </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="26"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">        int_object.SetInt(i);  </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="27"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">        array1.PushBack(int_object,allocator);  </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="28"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    }  </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="29"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    doc.AddMember(<span class="hljs-string">"number"</span>,array1,allocator);  </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="30"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    <span class="hljs-comment">//3.添加复合对象  </span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="31"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    <span class="hljs-function">Value <span class="hljs-title">object</span><span class="hljs-params">(kObjectType)</span></span>;  <span class="hljs-comment">//kObjectType枚举成员 表示对象</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="32"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    object.AddMember(<span class="hljs-string">"language1"</span>,<span class="hljs-string">"C++"</span>,allocator);  </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="33"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    object.AddMember(<span class="hljs-string">"language2"</span>,<span class="hljs-string">"java"</span>,allocator);  </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="34"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    doc.AddMember(<span class="hljs-string">"language"</span>,object,allocator);  </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="35"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    <span class="hljs-comment">//4.添加对象数组和复合对象的组合  </span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="36"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    <span class="hljs-function">Value <span class="hljs-title">array2</span><span class="hljs-params">(kArrayType)</span></span>;  </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="37"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    <span class="hljs-function">Value <span class="hljs-title">object1</span><span class="hljs-params">(kObjectType)</span></span>;  </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="38"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    object1.AddMember(<span class="hljs-string">"hobby"</span>,<span class="hljs-string">"drawing"</span>,allocator);  </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="39"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    array2.PushBack(object1,allocator);  </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="40"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    <span class="hljs-function">Value <span class="hljs-title">object2</span><span class="hljs-params">(kObjectType)</span></span>;  </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="41"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    object2.AddMember(<span class="hljs-string">"height"</span>,<span class="hljs-number">1.71</span>,allocator);  </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="42"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    array2.PushBack(object2,allocator);  </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="43"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    doc.AddMember(<span class="hljs-string">"information"</span>,array2,allocator);  </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="44"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    StringBuffer buffer;  </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="45"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    <span class="hljs-comment">//PrettyWriter&lt;StringBuffer&gt; pretty_writer(buffer);  //PrettyWriter是格式化的json(自动换行) </span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="46"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">	Writer&lt;StringBuffer&gt; pretty_writer(buffer);      <span class="hljs-comment">//Writer则是换行空格压缩后的json (换行和空格忽视)</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="47"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    doc.Accept(pretty_writer);  </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="48"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    <span class="hljs-comment">//打印到屏幕  </span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="49"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    <span class="hljs-built_in">cout</span>&lt;&lt;<span class="hljs-string">"the json output:"</span>&lt;&lt;<span class="hljs-built_in">endl</span>;  </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="50"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    <span class="hljs-built_in">cout</span>&lt;&lt;buffer.GetString()&lt;&lt;<span class="hljs-built_in">endl</span>;  </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="51"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    <span class="hljs-comment">//输出到文件  </span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="52"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    ofstream fout;  </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="53"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    fout.open(<span class="hljs-string">"test"</span>);    <span class="hljs-comment">//可以使绝对和相对路径,用\\隔开目录,test, test.json, test.txt 都行,不局限于文件格式后缀,只要是文本文档  </span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="54"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    fout&lt;&lt;buffer.GetString();  </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="55"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    fout.close();  </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="56"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">}  </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="57"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">  </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="58"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-comment">//读json文件  </span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="59"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-function"><span class="hljs-keyword">void</span> <span class="hljs-title">json_read</span><span class="hljs-params">()</span>  </span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="60"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">{  </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="61"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    <span class="hljs-built_in">cout</span>&lt;&lt;<span class="hljs-string">"the json read:"</span>&lt;&lt;<span class="hljs-built_in">endl</span>;  </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="62"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    ifstream fin;  </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="63"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    fin.open(<span class="hljs-string">"test"</span>);  </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="64"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    <span class="hljs-built_in">string</span> str;  </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="65"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    <span class="hljs-built_in">string</span> str_in=<span class="hljs-string">""</span>;  </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="66"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    <span class="hljs-keyword">while</span>(getline(fin,str))    <span class="hljs-comment">//一行一行地读到字符串str_in中  </span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="67"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    {  </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="68"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">        str_in=str_in+str+<span class="hljs-string">'\n'</span>;  </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="69"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    }  </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="70"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    <span class="hljs-comment">//解析并打印出来  </span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="71"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    Document document;  </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="72"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    document.Parse&lt;<span class="hljs-number">0</span>&gt;(str_in.c_str());  </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="73"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">  </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="74"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    Value &amp;node1=document[<span class="hljs-string">"author"</span>];  </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="75"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    <span class="hljs-built_in">cout</span>&lt;&lt;<span class="hljs-string">"author: "</span>&lt;&lt;node1.GetString()&lt;&lt;<span class="hljs-built_in">endl</span>;  </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="76"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">  </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="77"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    Value &amp;node2=document[<span class="hljs-string">"number"</span>];  </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="78"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    <span class="hljs-built_in">cout</span>&lt;&lt;<span class="hljs-string">"number: "</span>&lt;&lt;<span class="hljs-built_in">endl</span>;  </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="79"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    <span class="hljs-keyword">if</span>(node2.IsArray())  </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="80"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    {  </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="81"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">        <span class="hljs-keyword">for</span>(<span class="hljs-keyword">int</span> i=<span class="hljs-number">0</span>;i&lt;node2.Size();i++)  </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="82"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">            <span class="hljs-built_in">cout</span>&lt;&lt;<span class="hljs-string">'\t'</span>&lt;&lt;node2[i].GetInt()&lt;&lt;<span class="hljs-built_in">endl</span>;  </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="83"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    }  </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="84"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">  </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="85"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    Value &amp;node3=document[<span class="hljs-string">"language"</span>];   <span class="hljs-comment">//&lt;&lt;&lt;这里要特别注意,取对象&gt;&gt;&gt;</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="86"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    <span class="hljs-built_in">cout</span>&lt;&lt;<span class="hljs-string">"language: "</span>&lt;&lt;<span class="hljs-built_in">endl</span>;  </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="87"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    Value &amp;tmp=node3[<span class="hljs-string">"language1"</span>];       <span class="hljs-comment">//&lt;&lt;&lt;这里是取子对象&gt;&gt;&gt;</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="88"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    <span class="hljs-built_in">cout</span>&lt;&lt;<span class="hljs-string">'\t'</span>&lt;&lt;<span class="hljs-string">"language1: "</span>&lt;&lt;tmp.GetString()&lt;&lt;<span class="hljs-built_in">endl</span>;  <span class="hljs-comment">//&lt;&lt;&lt;取子对象成员&gt;&gt;&gt;</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="89"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    tmp=node3[<span class="hljs-string">"language2"</span>];  </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="90"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    <span class="hljs-built_in">cout</span>&lt;&lt;<span class="hljs-string">'\t'</span>&lt;&lt;<span class="hljs-string">"language2: "</span>&lt;&lt;tmp.GetString()&lt;&lt;<span class="hljs-built_in">endl</span>;  </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="91"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">  </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="92"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    Value &amp;node4=document[<span class="hljs-string">"information"</span>];  </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="93"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    <span class="hljs-built_in">cout</span>&lt;&lt;<span class="hljs-string">"information: "</span>&lt;&lt;<span class="hljs-built_in">endl</span>;  </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="94"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    <span class="hljs-keyword">if</span>(node4.IsArray())  </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="95"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    {  </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="96"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">        <span class="hljs-keyword">int</span> i=<span class="hljs-number">0</span>;  </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="97"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">        Value &amp;data=node4[i];   <span class="hljs-comment">//注意,此处下表索引只能用变量,不能用常量,例如node[0]编译错误  </span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="98"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">        <span class="hljs-built_in">cout</span>&lt;&lt;<span class="hljs-string">'\t'</span>&lt;&lt;<span class="hljs-string">"hobby: "</span>&lt;&lt;data[<span class="hljs-string">"hobby"</span>].GetString()&lt;&lt;<span class="hljs-built_in">endl</span>;  </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="99"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">        i=<span class="hljs-number">1</span>;  </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="100"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">        data=node4[i];  </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="101"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">        <span class="hljs-built_in">cout</span>&lt;&lt;<span class="hljs-string">'\t'</span>&lt;&lt;<span class="hljs-string">"height: "</span>&lt;&lt;data[<span class="hljs-string">"height"</span>].GetDouble()&lt;&lt;<span class="hljs-built_in">endl</span>;  </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="102"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    }  </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="103"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">  </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="104"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">}  </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="105"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-function"><span class="hljs-keyword">int</span> <span class="hljs-title">main</span><span class="hljs-params">(<span class="hljs-keyword">int</span> argc,<span class="hljs-keyword">char</span> **argv)</span>  </span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="106"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">{  </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="107"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    <span class="hljs-comment">//写、读 测试  </span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="108"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    json_write();  </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="109"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    json_read();  </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="110"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;  </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="111"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">}  </div></div></li></ol></code><div class="hljs-button signin" data-title="登录后复制" onclick="hljs.signin(event)"></div></pre>运行结果(<span style="color:#ff0000;">PrettyWriter</span>):<br><span style="font-size:14px;"></span><pre><code class="language-perl">the json output:

{
“author”: “tashaxing”,
“number”: [
0,
1,
2
],
“language”: {
“language1”: “C++”,
“language2”: “java”
},
“information”: [
{
“hobby”: “drawing”
},
{
“height”: 1.71
}
]
}
the json read:
author: tashaxing
number:
0
1
2
language:
language1: C++
language2: java
information:
hobby: drawing
height: 1.71
运行结果(Writer):

the json output:
{“author”:“tashaxing”,“number”:[0,1,2],“language”:{“language1”:“C++”,“language2”:“java”},“information”:[{“hobby”:“drawing”},{“height”:1.71}]}
the json read:
author: tashaxing
number:
0
1
2
language:
language1: C++
language2: java
information:
hobby: drawing
height: 1.71

还有一种方法可以封装Json格式字符串:


 
 
  1. #include “rapidjson/document.h”
  2. #include “rapidjson/writer.h”
  3. #include “rapidjson/stringbuffer.h”
  4. #include “rapidjson/prettywriter.h”
  5. #include <iostream>
  6. #include <vector>
  7. #include <string>
  8. using namespace std;
  9. using namespace rapidjson;
  10. // json格式:{“RetCd”:“0”,“RetMsg”:"",“row1”:[{“key”:1,“name”:“aa”},…]}
  11. struct AA{
  12. int a;
  13. string b;
  14. };
  15. int main()
  16. {
  17. vector<AA> para;
  18. AA a;
  19. a.a = 1;
  20. a.b = “aa”;
  21. para.push_back(a);
  22. a.a = 2;
  23. a.b = “bb”;
  24. para.push_back(a);
  25. a.a = 3;
  26. a.b = “cc”;
  27. para.push_back(a);
  28. //开始
  29. StringBuffer buffer;
  30. //Writer<StringBuffer> writer(buffer);
  31. PrettyWriter<StringBuffer> writer(buffer);
  32. writer.StartObject(); //根对象 开始
  33. writer.Key( “RetCd”); //键
  34. writer.String( “0”); //值
  35. writer.Key( “RetMsg”);
  36. writer.String( "");
  37. writer.Key( “row1”);
  38. writer.StartArray(); //数组 开始
  39. //…
  40. for( int i = 0;i < para.size();i++){
  41. writer.StartObject(); //子对象 开始
  42. writer.Key( “key”);
  43. writer.Int(para[i].a);
  44. writer.Key( “name”);
  45. writer.String(para[i].b.c_str());
  46. writer.EndObject(); //子对象 结束
  47. }
  48. writer.EndArray(); //数组 结束
  49. writer.EndObject(); //根对象 结束
  50. printf( "%s\n",buffer.GetString());
  51. return 0;
  52. }

运行结果:

{
<span class="hljs-string">"RetCd"</span>: <span class="hljs-string">"0"</span>,
<span class="hljs-string">"RetMsg"</span>: <span class="hljs-string">""</span>,
<span class="hljs-string">"row1"</span>: [
    {
        <span class="hljs-string">"key"</span>: <span class="hljs-number">1</span>,
        <span class="hljs-string">"name"</span>: <span class="hljs-string">"aa"</span>
    },
    {
        <span class="hljs-string">"key"</span>: <span class="hljs-number">2</span>,
        <span class="hljs-string">"name"</span>: <span class="hljs-string">"bb"</span>
    },
    {
        <span class="hljs-string">"key"</span>: <span class="hljs-number">3</span>,
        <span class="hljs-string">"name"</span>: <span class="hljs-string">"cc"</span>
    }
]

}

补充几个json的概念:

(1)标准json和非标准json:

标准json要求键必须都是双引号的字符串,而非标准json可以单引号。

例如:

{a : ‘abc’}

{‘a’ : ‘abc’}

{a : “abc”}

{“a” : “abc”}

只有第4个是标准json

(2)json中的[]与{}:

在 JSON 里 [] 是 Array {} 是Ojbect 

[] Array 的key 是 int  从0算起
{} 的key 是 string 









文章最后发布于: 2018-03-21 09:17:27


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值