我有这段代码将一些成员添加到对象类型文档
void test01(rapidjson::Document& doc)
{
doc.AddMember("test01", 123, doc.GetAllocator());
char name[] = "test02";
doc.AddMember(name, 2, doc.GetAllocator());
string sname = "test03";
doc.AddMember(sname.c_str(), 3, doc.GetAllocator());
}
和这件序列化它
rapidjson::StringBuffer buffer;
rapidjson::PrettyWriter<rapidjson::StringBuffer> writer (buffer);
document.Accept (writer);
std::string json = buffer.GetString();
但是得到的值是
{
"test01": 123,
"ÌÌÌÌÌÌ": 2,
"ÌÌÌÌÌÌ": 3
}
有人知道为什么吗?
答案 0 :(得分:1)
根据vaultah的建议,我发现我必须明确创建
rapidjson::Value name(pair.first.c_str(), allocator);
强制它使用字符串复制构造函数,并使用
json.AddMember(name.Move(), Value(123).Move(), allocator);
添加到json文档。
答案 1 :(得分:1)
如果你想在addmember函数中使用变量字符串作为成员名,以下内容对我有用:
char buff[50];
sprintf(buff, "%d", somefacyNumber);
Value vMemberName (kStringType);
vMemberName.SetString(buff, strlen(buff), nalloc); // for buffs we must do this,
// if we use stringref, then next next time we add a buffer we stamp on previous value
someObject.AddMember(vMemberName, vSomeOtherValue, nalloc); // nalloc is our allocator
答案 2 :(得分:0)
rapidjson::Document json;
json.setObject();
json.AddMemeber(StringRef(TEST01.c_str()), Value(123), json.GetAllocator());
那么,为什么&#34; test02&#34;和&#34; test03&#34;是mojibake,因为记忆没有以正确的方式分配。
虽然c_str()
是弱引用,所以,上面的代码可以工作,但并不好。