c – jsoncpp.通过匹配值在数组中查找对象

前端之家收集整理的这篇文章主要介绍了c – jsoncpp.通过匹配值在数组中查找对象前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有这个 JSON对象:
{"books":[
    {
      "author" : "Petr","book_name" : "Test1","pages" : 200,"year" : 2002
    },{
      "author" : "Petr","book_name" : "Test2","pages" : 0,"year" : 0
    },{
      "author" : "STO","book_name" : "Rocks","pages" : 100,"year" : 2002
    }
  ]
}

例如,我需要找一本作者密钥等于Petr的书.我怎样才能做到这一点?现在我有这段代码

Json::Value findBook(){
    Json::Value root = getRoot();

    cout<<root["books"].toStyledString()<<endl; //Prints JSON array of books mentioned above

    string searchKey;
    cout<<"Enter search key: ";
    cin>>searchKey;

    string searchValue;
    cout<<"Enter search value: ";
    cin>>searchValue;

    Json::Value foundBooks = root["books"]???; // How can I get here a list of books where searchKey is equal to searchValue?
}

提前致谢.

解决方法

这样的事应该做​​:
std::vector<Json::Value> booksByPeter(const Json::Value& root) {
    std::vector<Json::Value> res;
    for (const Json::Value& book : root["books"])  // iterate over "books"
    {
        if (book["author"].asString() == "Petr")   // if by "Petr"
        {
            res.push_back(book);                   // take a copy
        }
    }
    return res;                                    // and return
}

如果不是C 11,则必须做:

const Json::Value& books = root["books"];
for (Json::ValueConstIterator it = books.begin(); it != books.end(); ++it)
{
    const Json::Value& book = *it;
    // rest as before
}

猜你在找的C&C++相关文章