2015-02-05 263 views
0

我有一個json對象:[{a:"b"},{a:"c"},{a:"c"},{a:"d"},{a:"e"}] 它存儲在Json::Value對象中。在鍵值上過濾Json :: Value對象

我似乎遇到一些麻煩與JSON對象向下過濾說:只有「A」 =「C」

我試圖做到以下幾點:

Json::Value data (*result.GetValue()); 
std::string filterValue = message->GetData()["Filter"]; 
std::string filterKey("a"); 
//above was just a quick variable definition for my example. 

for (auto row = data.begin(); row != data.end(); ++row) 
    { 
    if (*row[filterKey].asString().compare(filterValue) != 0) 
     { 
     //Remove this row from the JSON object. 
     } 
    } 

通常我我是一個JavaScript開發人員,但我想在將C++ 11的結果發送給客戶端之前進行篩選。在Javascript中它就像這樣簡單:[].filter(function(ele){ if (ele["a"] == "c") return true; return false; });但這在這裏沒有幫助。

在Json :: Value api中,我沒有看到任何類型的過濾函數。

編輯:另一個問題是我不知道如何一切都將在循環作用,如果我刪除的項目......類似:row->clear()或類似

回答

0

只是做:

Json::Value newOut; 
for (Json::Value row : data) 
    { 
    if (row["a"].asString().compare("b") == 0) 
    { 
    newOut.append(row); 
    } 
    } 
return newOut; 

那將返回匹配的子集。在這種情況下無需做迭代器。