C++使用RapidJson的demo

备注:本文展示一个使用RapidJson的简单示例,仅供参考,这是示例代码,非常简略,只是为了初学者方便学习使用。

本示例使用CLion创建工程,直接在工程代码中引入RapidJson,将其放在本工程的中

1,目录结构

在这里插入图片描述
RapidJson所有代码都在rapdijson目录中

2,CMakeLists.txt文件

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文件

#include <iostream>
#include "rapidjson/document.h"
#include <vector>
#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<string> 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<StringBuffer> writer(strBuffer);  
    document.Accept(writer);  
    cout << strBuffer.GetString() << endl;

    return 0;
}

4, 执行结果

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":"某街道"}}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用 RapidJSON 库将一个 JSON 对象添加到另一个 JSON 对象中,可以使用 `AddMember()` 函数。以下是一个示例: ```cpp #include <iostream> #include <rapidjson/document.h> #include <rapidjson/writer.h> #include <rapidjson/stringbuffer.h> using namespace rapidjson; int main() { // 创建一个 JSON 对象 Document document; document.SetObject(); // 创建要添加的 JSON 对象 Value innerObject(kObjectType); Value key("name"); Value value("John"); innerObject.AddMember(key, value, document.GetAllocator()); // 将内部对象添加到外部对象 Value keyOuter("person"); document.AddMember(keyOuter, innerObject, document.GetAllocator()); // 将 JSON 对象转换为字符串 StringBuffer buffer; Writer<StringBuffer> writer(buffer); document.Accept(writer); std::string jsonString = buffer.GetString(); // 打印 JSON 字符串 std::cout << jsonString << std::endl; return 0; } ``` 在上述示例中,我们首先创建了一个外部的 JSON 对象 `document`。然后,我们创建了一个要添加到外部对象中的内部对象 `innerObject`。接下来,我们使用 `AddMember()` 函数将内部对象添加到外部对象中,并指定键名为 `"person"`。最后,我们将整个 JSON 对象转换为字符串形式。 输出结果示例: ```json {"person":{"name":"John"}} ``` 这是一个简单的示例,展示了如何使用 RapidJSON 库将一个 JSON 对象添加到另一个 JSON 对象中。你可以根据需要修改和扩展这个示例。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值