2016-01-12 39 views
0

我做一些東西與rapidjson,我想將值添加到我就是這樣如何使用rapidjson更新數組?

#include <iostream> 
#include "rapidjson/document.h" 
using namespace std ; 

int main() { 


    char json[1024]; 
    rapidjson::Document document ; 
    document.Parse<0>(json); 
    if (!document.IsObject()) { 
      document.SetObject(); 
    } 
    assert(document.IsObject()); 
    rapidjson::Document::AllocatorType& allocator = document.GetAllocator(); 
    // adding member (int) 
    document.AddMember("mohammed",25,allocator); 
    assert(document.HasMember("mohammed")); 
    cout << document["mohammed"].GetInt() << endl ; 

    // adding member (array) 
    rapidjson::Value array(rapidjson::kArrayType); 
    array.PushBack(5,allocator); 
    array.PushBack(6,allocator); 
    cout << array[0u].GetInt() << endl ; 
    cout << array[1].GetInt() << endl ; 
    document.AddMember("array",array,allocator); 
    assert(document.HasMember("array")); 
    assert(document["array"].IsArray()); 
    // here the following line give me an error 
    array.PushBack(7,allocator); 




} 

創建一個數組的錯誤是

json: rapidjson/document.h:397: rapidjson::GenericValue<Encoding, Allocator>& rapidjson::GenericValue<Encoding, Allocator>::PushBack(rapidjson::GenericValue<Encoding, Allocator>&, Allocator&) [with Encoding = rapidjson::UTF8<>; Allocator = rapidjson::MemoryPoolAllocator<>]: Assertion `IsArray()' failed. 

中止(核心轉儲)

是什麼問題可以解釋嗎?發生了什麼我有點新,謝謝。

回答

2

當執行array.PushBack(...)array已是移動document,成爲空值類型(array.IsNull() == true)。所以你不能PushBack爲空值。

document["array"].PushBack(7,allocator)將工作。

+0

好東西讓我的問題從寫這個圖書館的人回答,謝謝,順便說一句,這個圖書館給我很難,我需要在一個項目中使用它,我有點不知所措。 – mohammed

+0

該PushBack導致rapidjson :: Value不再有效,因此很容易忘記,並且當您在當前文檔之外創建rapidjson :: Value時,請記住使用分配器! –