rapidjson的使用
1、包含头文件
#include "rapidjson/stringbuffer.h"
#include "rapidjson/document.h"
#include "rapidjson/reader.h"
#include "rapidjson/writer.h"
using namespace rapidjson;
2、读json字符串内容
string str = "{"name":"qfl","age":20,"letter":["a","b","c"],"location":{"province":"fujian","city":"xiamen","number":16},"book":[{"name":"book1","isbn":"123"},{"name":"book2","isbn":"456"}],"healthy":true}";
rapidjson::Document doc;
doc.Parse<0>(str.c_str());
if(doc.HasParseError())
{
rapidjson::ParseErrorCode code = doc.GetParseError();
return;
}
else
{
if(doc.HasMember("name"))
string name = doc["name"].GetString();
if(doc.HasMember("age"))
int age = doc["age"].getInt(); if(doc.HasMember("letter"))
{
rapidjson::Value& letter = doc["letter"];
if(letter.IsArray() && !letter.Empty())
{
for(rapidjson::SizeType i=0;i<letter.Size();i++)
{
string strValue = letter[i].GetString();
}
}
} if(doc.HasMember("location"))
{
rapidjson::Value& location = doc["location"];
if(location.IsObject())
{
if(location.HasMember("province"))
string strProvince = location["province"].GetString();
if(location.HasMember("city"))
string strCity = location["city"].GetString();
if(location.HasMember("number"))
int number = location["number"].GetInt();
}
} if(doc.HanMember("book"))
{
rapidjson::Value& book = doc["book"];
if(book.IsArray() && !book.Empty())
{
for(rapidjson::SizeType i=0;i<book.Size();i++)
{
rapidjson::value& Temp = book[i]; if(Temp.IsObject())
{
if(Temp.HasMember("name"))
string strName = Temp["name"].GetString();
if(Temp.HasMember("isbn"))
int nValue = Temp["isbn"].getInt();
}
}
}
} if(doc.HasMember("healthy")
{
if(doc["healthy"}.GetBool())
{
}
}
}
3、生成json字符串
string str = "{"name":"qfl","age":20,"letter":["a","b","c"],"location":{"province":"fujian","city":"xiamen","number":16},"book":[{"name":"book1","isbn":"123"},{"name":"book2","isbn":"456"}],"healthy":true}";
rapidjson::Document doc;
doc.SetObject();
rapidjson::Document::AllocatorType& allocator = doc.GetAllocator();
rapidjson::Value name("qfl",allocator);
doc.AddMember("name",name,allocator);
doc.AddMember("age",20,allocator);
rapidjson::Value letter(rapidjson::kArrayType);
rapidjson::Value letter_1("a",allocator);
rapidjson::Value letter_2("b",allocator);
rapidjson::Value letter_3("c",allocator);
letter.PushBack(letter_1,allocator);
letter.PuhBack(letter_2,allocator);
letter.PushBack(letter_3,allocator);
doc.AddMember("letter",letter,allocator);
rapidjson::Value location(rapidjson::kObjectType);
rapidjson::Value province("fujian",allocator);
rapidjson::Value city("xiamen",allocator);
location.AddMember("province",province,allocator);
location.AddMember("city",city,allocator);
location.AddMember("number",16,allocator);
rapidjson::Value book(rapidjson::kArrayType);
rapidjson::Value object_1(rapidjson::kObjectType);
rapidjson::Value bname1("book1",allocator);
rapidjson::Value bisbn1("123",allocator);
object_1.AddMember("name",bname1,allocator);
object_1.AddMember("isbn",bisbn1,allocator);
book.PushBack(object_1,allocator);
rapidjson::Value object_2(rapidjson::kObjectType);
rapidjson::Value bname2("book2",allocator);
rapidjson::Value bisbn2("456",allocator);
object_2.AddMember("name",bname2,allocator);
object_2.AddMember("isbn",bisbn2,allocator);
book.PushBack(object_2,allocator);
book.AddMember("book",book,allocator);
doc.AddMember("healthy",true,allocator);
rapidjson::StringBuffer buffer;
rapidjson::Writer<rapidjson::StringBuffer> writer(buffer);
doc.Accept(writer);
std::string json = std::string(buffer.GetString());
rapidjson的使用的更多相关文章
- RapidJSON v1.1.0 发布简介
时隔 15.6 个月,终于发布了一个新版本 v1.1.0. 新版本除了包含了这些日子收集到的无数的小改进及 bug fixes,也有一些新功能.本文尝试从使用者的角度,简单介绍一下这些功能和沿由. P ...
- RapidJSON 代码剖析(四):优化 Grisu
我曾经在知乎的一个答案里谈及到 V8 引擎里实现了 Grisu 算法,我先引用该文的内容简单介绍 Grisu.然后,再谈及 RapidJSON 对它做了的几个底层优化. (配图中的<Grisù& ...
- RapidJSON 代码剖析(三):Unicode 的编码与解码
根据 RFC-7159: 8.1 Character Encoding JSON text SHALL be encoded in UTF-8, UTF-16, or UTF-32. The defa ...
- RapidJSON 代码剖析(二):使用 SSE4.2 优化字符串扫描
现在的 CPU 都提供了单指令流多数据流(single instruction multiple data, SIMD)指令集.最常见的是用于大量的浮点数计算,但其实也可以用在文字处理方面. 其中,S ...
- RapidJSON 代码剖析(一):混合任意类型的堆栈
大家好,这个专栏会分析 RapidJSON (中文使用手册)中一些有趣的 C++ 代码,希望对读者有所裨益. C++ 语法解说 我们先来看一行代码(document.h): bool StartArr ...
- RapidJson读取json文档
Json格式定义如下 Object: { _Name:_Data,... } 最后一项后面没有逗号 Array: [_Data,_Data,...] 最后一项后面没有逗号 _Name: String ...
- 这个东西,写C++插件的可以用到。 RapidJSON —— C++ 快速 JSON 解析器和生成器
点这里 原文: RapidJSON —— C++ 快速 JSON 解析器和生成器 时间 2015-04-05 07:33:33 开源中国新闻原文 http://www.oschina.net/p/ ...
- Cocos2d-x移植到WindowsPhone8移植问题-框架rapidjson移植问题
Cocos2d-x 3.0提供了JSON框架rapidjson可以在Windows Phone 8平台使用,如果没有进行必要的配置,在编译的时候会报错,document.h等头文件找不到的错误.在Wi ...
- cocos2d-x3.x使用rapidjson
rapidjson效率高,所以之前cocostudio里面解析用的jsoncpp也换成了rapidjson. 引擎又带有rapidjson库,所以不用单独去下载,直接就可以用. 这里主要写一下关于解析 ...
- cocos2dx 3.2 定义自己使用rapidjson阅读json数据
一.说明 我在这里得到的只是一个简单的定义string和Int种类,其他数据类型可以被替换向上. 两.头文件 class JsonReadUtils { public: static JsonRead ...
随机推荐
- 从bind函数看js中的柯里化
以下是百度百科对柯里化函数的解释:柯里化(Currying)是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数且返回结果的新函数的技术.概念太抽象,可能 ...
- PV操作2011
- Oracle 中count(1) 、count(*) 和count(列名) 函数的区别
1)count(1)与count(*)比较: 1.如果你的数据表没有主键,那么count(1)比count(*)快2.如果有主键的话,那主键(联合主键)作为count的条件也比count(*)要快3. ...
- vim 中替换命令
vi/vim 中可以使用 :s 命令来替换字符串.以前只会使用一种格式来全文替换,今天发现该命令有很多种写法(vi 真是强大啊,还有很多需要学习),记录几种在此,方便以后查询. :s/vivian/s ...
- 常用sql 全记录(添加中)
-- 数据库SQL总结中........... --SQL分类: (CREATE,ALTER,DROP,DECLARE) ---DDL—数据定义语言(SELECT,DELETE,UPDATE,INSE ...
- 一步一步学习IdentityServer4 (3)自定登录界面并实现业务登录操作
IdentityServer4 相对 IdentityServer3 在界面上要简单一些,拷贝demo基本就能搞定,做样式修改就行了 之前的文章已经有登录Idr4服务端操作了,新建了一个自己的站点 L ...
- mysqlsla 安装
tar -zxvf mysqlsla-2.03.tar.gz cd mysqlsla-2.03 perl Makefile.PLmake && make install BEGIN f ...
- WebLogic和Tomcat的区别
J2ee开发主要是浏览器和服务器进行交互的一种结构.逻辑都是在后台进行处理,然后再把结果传输回给浏览器.可以看出服务器在这种架构是非常重要的. 这几天接触到两种Java的web服务器,做项目用的Tom ...
- 最详细的vue-cli安装教程 &^没有之一 ^& 大神亲测。。╮( ̄▽  ̄)╭
这里介绍使用git安装,电脑自带命令行依然可以使用进行安装 第一步 node环境安装 1.1 如果本机没有安装node运行环境,请下载node 安装包进行安装 1.2 如果本机已经安装node的运行换 ...
- Ubuntu18.04 之jdk安装与环境配置
1.oracle官网下载压缩包. 下载地址为: https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133 ...