【问题标题】:Rapidjson DocumentRapidjson 文档
【发布时间】:2014-06-06 15:01:03
【问题描述】:

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

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"
    }
  ]
}

【问题讨论】:

    标签: c++ rapidjson


    【解决方案1】:

    你可以这样做

    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());
    

    【讨论】:

      【解决方案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());
      

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

      【讨论】:

        【解决方案3】:

        好的,你需要创建一个包含分配和 url 的数组,你需要把这个数组放在分配中:

        rapidjson::Value myArray(rapidjson::kArrayType);
        
        doc.AddMember("allocations", myArray, doc.getAllocator);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-01-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多