C++项目RapidJson用法总结

该博客围绕JSON展开,详细介绍了构造复杂JSON的例子,还说明了简单JSON对象的构造方法。同时,讲解了JSON对象的解析过程,以及如何对JSON对象的键值进行修改,为处理JSON数据提供了全面指导。

1.构造复杂Json,例子详解:

//整个Json字符串由一个Document对象来管理

rapidjson::Document document;
document.SetObject();

//添加name:value对

const char *name = "name";
const char *value = "zhangdada";
document.AddMember(rapidjson::StringRef(name), rapidjson::StringRef(value), document.GetAllocator());


//添加Json 对象

rapidjson::Value info_objects(rapidjson::kObjectType);
std::string jsonObject = "json_object";
info_objects.AddMember(rapidjson::StringRef("class_room"), rapidjson::StringRef("NO.6110"), document.GetAllocator());
info_objects.AddMember(rapidjson::StringRef("teacher_name"), rapidjson::StringRef("ZhangSanfeng"), document.GetAllocator());
document.AddMember(rapidjson::StringRef(jsonObject.c_str()), info_objects, document.GetAllocator());

//添加Json 数组
rapidjson::Value array_objects(rapidjson::kArrayType);
for (int i = 0; i < 2; i++)
{
    Value object(kObjectType);
    Value nobject(kNumberType);
    nobject.SetInt(i);
    object.AddMember(StringRef("id"), nobject, document.GetAllocator());
    object.AddMember(StringRef("name"), StringRef("zhangsan"), document.GetAllocator());
    array_objects.PushBack(object, document.GetAllocator());
}
char *jsonarrayname = "jsonarrayname";
document.AddMemory(rapidjson::StringRef(jsonarrayname), array_objects, document.GetAllocator());

//将构造好的json转化成c++字符串的形式
rapidjson::StringBuffer buffer;
rapidjson::Writer<rapidjson::StringBuffer> writer(buffer);
document.Accept(writer);
std::string json = std::string(buffer.GetString));

2.构造简单json对象:

  StringBuffer s;
    Writer<StringBuffer> writer(s);

    writer.StartObject();               // Between StartObject()/EndObject(),
    writer.Key("hello");                // output a key,
    writer.String("world");             // follow by a value.
    writer.Key("t");
    writer.Bool(true);
    writer.Key("f");
    writer.Bool(false);
    writer.Key("n");
    writer.Null();
    writer.Key("i");
    writer.Uint(123);
    writer.Key("pi");
    writer.Double(3.1416);
    writer.Key("a");
    writer.StartArray();                // Between StartArray()/EndArray(),
    for (unsigned i = 0; i < 4; i++)
        writer.Uint(i);                 // all values are elements of the array.
    writer.EndArray();
    writer.EndObject();
    // {"hello":"world","t":true,"f":false,"n":null,"i":123,"pi":3.1416,"a":[0,1,2,3]}
    std::cout << s.GetString() << std::endl;

3.json对象解析:

const char *buffer = "{"code":200, "msg":"succeed","data":{"name":"jianli", "age":25}}";

Document document;
document.Parse<rapidjson::kParseDefaultFlags>(buffer);

if(document.HasParseError())
{
    printf("%s\n", "Json object parse failed.");
}

if(!document.HasMember("code"))
{
    printf("%s\n", "Json object has no \"code\" member.");
}
int obj1 = document["code"].GetInt();

if(!document.HasMember("msg"))
{
    printf("%s\n", "Json object has no \"msg\" member.");
}

char *msg = document["msg"].GetString();

rapidjson::Value &obj2 = document["data"];
if(!obj2.IsObject())
{
    printf("%s\n", "obj2 is not a object.");
}

4.修改键值:

    const char* json = "{\"project\":\"rapidjson\",\"stars\":10}";

    //1.创建Json文档对象
    Document d;
    document.Parse<rapidjson::kParseDefaultFlags>(buffer);

    //2.修改键值
    Value& p = d["project"];
    p.SetString(rapidjson::StringRef("raoidjson-new"));

    Value& s = d["stars"];
    s.SetInt(s.GetInt() + 1);

    //3.将json对象转换成c++字符串
    StringBuffer buffer;
    Writer<StringBuffer> writer(buffer);
    d.Accept(writer);
    
    //4.打印输出
    // Output {"project":"rapidjson","stars":11}
    std::cout << buffer.GetString() << std::endl;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值