美文网首页
RapidJson中AddMember字符串使用Value和St

RapidJson中AddMember字符串使用Value和St

作者: 晓函 | 来源:发表于2020-02-22 11:38 被阅读0次

    RapidJson中AddMember字符串使用Value和StringRef的区别

    Value:如果字符串生命周期很短,那么必须用Value(复制一份字符串到allocator),如果用StringRef(传入字符串指针),变量销毁后则会访问到错误的地址。

    StringRef:如果字符串变量生命周期能buffer.GetString之后,那么可以用StringRef(传入字符串指针)。

    //DEMO:构建一个JSON并输出为字符串
    string JsonEx::Demo(){
        
        Document d;
        d.SetObject();
        Document::AllocatorType& allocator = d.GetAllocator();
        vector<string> strs = { "111", "222", "三", "四" };
    
        Value valArray(kArrayType);
    
        for (int i = 0; i < strs.size(); i++){
            string str = strs.at(i);
            Value user(kObjectType);
            //如果字符串生命周期很短,那么必须用Value(复制一份字符串到allocator),如果用StringRef(传入字符串指针),变量销毁后则会访问到错误的地址。
            user.AddMember("nick", Value(str.c_str(), allocator), allocator);
            valArray.PushBack(user, allocator);
    
        }
        d.AddMember("list", valArray, allocator);
    
    
        string key("some"), value("this is some thing中文");
        //如果字符串变量生命周期能buffer.GetString之后,那么可以用StringRef(传入字符串指针)。
        d.AddMember(StringRef(key.c_str()), StringRef(value.c_str()), allocator);
    
    
        //输出为字符串
        StringBuffer buffer;
        Writer<StringBuffer> writer(buffer);
        d.Accept(writer);
        string s = buffer.GetString();
        MessageBoxA(NULL, s.c_str(), "json", 0);
    
        return s;
        
    }
    

    相关文章

      网友评论

          本文标题:RapidJson中AddMember字符串使用Value和St

          本文链接:https://www.haomeiwen.com/subject/qbqlqhtx.html