2015-10-07 270 views
0

我试图删除嵌套在JSON文件中的对象中的对象。但是,我无法在互联网上或正式的rapidjson页面上找到任何示例。我的代码是用C++编写的。使用rapidjson删除JSON中的嵌套对象

我曾尝试用下面的代码:

const Value& rootObject= document["root"]; 

const Value& settingsObject = extensionsObject; 

settingsObject.RemoveMember(); 

但我不知道通过什么参数或如何初始化MemberIterator的确切元素(因为我已经知道我要删除的对象的名称)。

这里是例如JSON结构:

{ 
    "root": { 
    "settings": { 
     "item1": { 
     "someInfo": 123 
     }, 
     "item2": { 
     "someInfo": "string" 
     } 
    } 
    } 
} 

回答

1

请赤我的代码。

Value Child_Obj(kObjectType); // creat object to but it inside another object 
Child_Obj.SetObject(); // set it 

Child_Obj.AddMember("Child Number", Value(15), Document->GetAllocator()); // add to child key and its value 

Value Parent_Obj(kObjectType); // creat parent object that will have inside him the child object 
Parent_Obj.SetObject(); // set it 

Parent_Obj.AddMember("Parent Number", Value(10), Document->GetAllocator()); // add to parent key and its value 
Parent_Obj.AddMember("Child", Child_Obj, Document->GetAllocator()); // add child object to parent object , "Child" as key and Child_Obj as value 

// now the file looks like this : 
/* 
{ 
    "Parent": 
    { 
    "Parent Number":10, 
    "Child": 
    { 
     "Child Number":15 
    } 
    } 
} 
*/ 

// let delete this child 
Parent_Obj.RemoveMember("Child"); // here you will give it the key for the object you need to delete 

// now its look like this : 
/* 
{ 
    "Parent": 
    { 
    "Parent Number":10, 
    } 
} 
*/ 

// and for fun , if you want to iterate through object , you can do this : 
Value::MemberIterator it = Parent_Obj.MemberBegin(); 
for (; it != Parent_Obj.MemberEnd(); ++it) 
{ 
    std::string str = it->name.GetString(); // this will give you the key for current child 
}