4

我正在尝试使用 rapidjson 创建一个 json 文档,但我不知道如何复制以下文档的一部分,特别是以“分配”开头的嵌套对象,用于我所做的其他元素

Value valObjectString(kStringType);
valObjectString.SetString("string");
doc.AddMember("string", valObjectString, doc.GetAllocator());

但是“分配”和“网址”呢?

{
  "string1": "string",
  "string2": "string",
  "string3": "string",
  "string4": "string",
  "string5": "string",
  "allocations": [
    {
      "allocation": "string",
      "url": "string"
    }
  ]
}
4

3 回答 3

7

你可以这样做

Value valObjectString(kStringType);
valObjectString.SetString("string");
doc.AddMember("string", valObjectString, doc.GetAllocator());

Value array(kArrayType);
Value tmp;
tmp.SetObject();
tmp.AddMember("allocation", "string", doc.GetAllocator());
tmp.AddMember("url", "string", doc.GetAllocator());
array.PushBack(tmp, doc.GetAllocator());
doc.AddMember("allocations", array, doc.GetAllocator());
于 2014-08-27T15:32:54.887 回答
2

创建所需 JSON 文档的一种简单方法是使用"rapidjson/writer.h"包含。

您需要使用writer.Key()创建对象的键并为其命名。然后,您可以使用writer.String()设置键的值。

(这里我使用.String()了 ,但您可以使用 RapidJson 支持的任何类型。)

writer.StartObject()此外,您可以使用、writer.StartArray()和命令轻松地告诉编写器何时开始和结束对象和数组writer.EndObject()writer.EndArray()

Document yourJsonDoc;

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

writer.StartObject();
writer.Key("string1");
writer.String("string");
writer.Key("string2");
writer.String("string");
writer.Key("string3");
writer.String("string");
writer.Key("string4");
writer.String("string");
writer.Key("string5");
writer.String("string");
writer.Key("allocations");
writer.StartArray();
writer.StartObject();
writer.Key("allocations");
writer.String("string");
writer.Key("url");
writer.String("string");
writer.EndObject();
writer.EndArray();
writer.EndObject();

yourJsonDoc.Parse(s.GetString().c_str());

如果您想添加其他对象,依此类推。

于 2017-06-16T20:25:09.317 回答
0

好的,您需要创建一个包含 allocation 和 url 的数组,并且需要将此数组放入 allocations 中:

rapidjson::Value myArray(rapidjson::kArrayType);

doc.AddMember("allocations", myArray, doc.getAllocator);
于 2014-06-09T15:33:40.283 回答