从网页获取json响应到c ++

时间:2018-05-07 03:15:31

标签: php c++ json

所以我试图从我的api获得一个json响应,然后根据响应返回true或false,但我不能绕过它。任何帮助表示赞赏。

编辑: 我发送到该页面的查询是:https://de2or.com/api.php?login=test123&password=test123&hwid=12345 - 如果需要,您可以自己查看。

然后我收到的是:     {     “错误”:是的,     “message”:“用户名或密码无效”,     “data”:null,     “status_code”: - 1     }

我想创建一个bool函数,如果得到它则返回false,否则只返回true。

我当前的代码,我认为没有正确处理json:

net::requests m_request(L"de2or-auth", false);
std::wstring answer = m_request.Post(false, URL, "login=%s&password=%s&    hwid=%s", username.c_str(), password.c_str(), (sw::sha512::calculate(hwid)).c_str());
if (answer == L"Try Again") {
    answer = m_request.Post(false, URL, "login=%s&password=%s&hwid=%s", username.c_str(), password.c_str(), (sw::sha512::calculate(hwid)).c_str());
}   

return answer != L"You have successfully login" ? false : true;

1 个答案:

答案 0 :(得分:1)

好像你在普通字符串中存储json响应。你试过任何json解析库吗? Rapid-json看起来很不错。

从它的documentation开始,你似乎可以这样做:

#include "rapidjson/document.h"
using namespace rapidjson;
// Your code to get answer here
GenericDocument<UTF16<> > document;
document.Parse(answer);
std::wstring msg(document["message"].GetString());
return msg == L"You have successfully login";

我假设您使用的是UTF-16编码。我没有尝试过代码,因此有可能事情进展不顺利。如果是这样,请评论我。

PS)您可以更具体,例如提供您正在使用的库(什么是net::requests?),您正在使用的编码,或者我们可以重现的自包含示例。

编辑以上代码不起作用。以下示例工作正常。

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

int main(void)
{
    std::wstring answer = L" { \"error\": true, \"message\": \"Invalid username or password\", \"data\": null, \"status_code\": -1 }";

    GenericDocument<UTF16<> > document;
    const wchar_t *newanswer = answer.c_str();
    document.Parse(newanswer);  
    std::wstring msg(document[L"message"].GetString());
    std::wcout << msg << std::endl;
    return 0;
}   

我忘了向L添加"message"前缀。此外,Rapid-json不支持将std :: basic_string放入其Parse方法中。文档有点乱......