在键值上过滤Json :: Value对象

时间:2015-02-05 14:06:22

标签: c++11

我有一个json对象:[{a:"b"},{a:"c"},{a:"c"},{a:"d"},{a:"e"}] 它存储在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()或类似的

1 个答案:

答案 0 :(得分:0)

只是这样做:

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

这将返回匹配的子集。在这种情况下无需执行迭代器。