备注:本文展示一个使用RapidJson的简单示例,仅供参考,这是示例代码,非常简略,只是为了初学者方便学习使用。
本示例使用CLion创建工程,直接在工程代码中引入RapidJson,将其放在本工程的中
1,目录结构
RapidJson所有代码都在rapdijson目录中
CMakeLists.txt
cmake_minimum_required(VERSION 3.10)
project(rapidjsondemo)
set(CMAKE_CXX_STANDARD 11)
SET(PROJECT_ROOT_PATH ".")
INCLUDE_DIRECTORIES("${PROJECT_ROOT_PATH}/rapidjson/")
#INCLUDE_DIRECTORIES("${PROJECT_ROOT_PATH}/src/")
#target_link_libraries(hellowrold curl) //Cannot specify link libraries for target "hellowrold" which is not built by this project.
add_executable(rapidjsondemo main.cpp)
3,main.cpp文件
#include4, 执行结果#include "rapidjson/document.h" #include #include "rapidjson/stringbuffer.h" #include "rapidjson/writer.h" using namespace std; using namespace rapidjson; // 教程:http://rapidjson.org/zh-cn/md_doc_tutorial_8zh-cn.html int main() { // json字符串 string jsonStr = "{"name": "张三", "age": 18}"; // 转成json对象 char* json = (char*)jsonStr.c_str(); Document document; document.Parse(json); cout << "name " << document["name"].GetString() << ", age " << document["age"].GetInt() << endl; // 添加字符串值到已有json中 Value str; str = "male"; document.AddMember("gender", str, document.GetAllocator());// 参数:key、value // 添加double节点到已有json中 Value doubleVal; doubleVal = 188.8; document.AddMember("height", doubleVal, document.GetAllocator()); cout << "gender " << document["gender"].GetString() << ",height " << document["height"].GetDouble() << endl; // 添加数组 Value arr(kArrayType); Document::AllocatorType& allocator = document.GetAllocator(); vector vec = {"cpp", "java", "python", "go", "c"}; for (int i = 0; i < 5; i++) { // 这里很奇怪的是直接放vec[i]编译不通过,不得不转char*再转StringRef arr.PushBack(StringRef(vec[i].c_str()), allocator); // 可能需要调用 realloc() 所以需要 allocator } // arr.PushBack("read", allocator).PushBack("code", allocator); // 另一种组装数组的方式 document.AddMember("languages", arr, allocator); cout << "languages:" << endl; // 使用引用来连续访问,方便之余还更高效。 const Value& a = document["languages"]; assert(a.IsArray());// 所有类型的值都可以先进行判断 for (SizeType i = 0; i < a.Size(); i++) { cout << a[i].GetString() << endl; } // 添加一个json子对象 Value addressSubObj(kObjectType); addressSubObj.AddMember("city", "北京", allocator); addressSubObj.AddMember("district", "海淀区2", allocator); addressSubObj.AddMember("street", "某街道", allocator); document.AddMember("address", addressSubObj, allocator); cout << "address is " << document["address"]["city"].GetString() << " district is " << document["address"]["district"].GetString() << " street is " << document["address"]["street"].GetString() << endl; // 转成字符串 StringBuffer strBuffer; Writer writer(strBuffer); document.Accept(writer); cout << strBuffer.GetString() << endl; return 0; }
cmake .
make
./rapidjsondemo
xxx-MacBook-Pro RapidJsonCppDemo % cmake .
-- Configuring done
-- Generating done
-- Build files have been written to: xxx/CLionProjects/RapidJsonCppDemo
xxx-MacBook-Pro RapidJsonCppDemo % make
Consolidate compiler generated dependencies of target rapidjsondemo
[ 50%] Building CXX object CMakeFiles/rapidjsondemo.dir/main.cpp.o
[100%] Linking CXX executable rapidjsondemo
[100%] Built target rapidjsondemo
xxx-MacBook-Pro RapidJsonCppDemo % ./rapidjsondemo
name 张三, age 18
gender male,height 188.8
languages:
cpp
java
python
go
c
address is 北京 district is 海淀区2 street is 某街道
{"name":"张三","age":18,"gender":"male","height":188.8,"languages":["cpp","java","python","go","c"],"address":{"city":"北京","district":"海淀区2","street":"某街道"}}



