0

我想在其中创建一个 json 对象cocos2d-x 3.4并将rapidjson其转换为字符串:

rapidjson::Document doc;
doc.SetObject();
doc.AddMember("key1",1,doc.GetAllocator());
doc["key2"]=2;

rapidjson::StringBuffer sb;
rapidjson::Writer<rapidjson::StringBuffer> writer(sb);
doc.Accept(writer);

CCLOG("%s",sb.GetString());

但输出是{"key1":1} not {"key1":1,"key2":2},为什么?

4

1 回答 1

0

在 RapidJSON 的旧 (0.1x) 版本中,doc["key2"]返回一个Value表示 Null 的单例。doc["key2"] = 2实际上写给那个单身人士。

较新版本的 RapidJSON (v1.0.x) 中,此行为已更改。它基本上使在 JSON 对象中找不到的键的断言失败,以解决您提到的确切问题。

提醒一下,当一个操作可能需要分配内存时(例如AddMemberor PushBackAllocator必须出现一个对象。由于operator[]通常只有一个参数,它不能像 STL 那样添加新成员。这很奇怪,也不是很人性化,但是这是 RapidJSON 设计中性能和内存开销的权衡。

于 2015-04-25T15:45:40.847 回答