C ++ Rest尝试从Web显示JSON文件时给出错误

时间:2016-06-28 15:48:44

标签: c++ rest c++11

我正在尝试创建一个可以在C ++的REST API控制台中显示JSON文件的程序。我正在尝试从api.trello.com获取JSON文件,但我遇到的每个示例都给出了一个错误,通常是关于@Query& cbegin()以及它不是cend() ...

的值

这是我的代码:

web::json::value

我在VS 2015中遇到此错误。

唯一的错误是// The code includes the most frequently used includes necessary to work with C++ REST SDK #include "cpprest/containerstream.h" #include "cpprest/filestream.h" #include "cpprest/http_client.h" #include "cpprest/json.h" #include "cpprest/producerconsumerstream.h" #include <iostream> #include <sstream> #include <stdio.h> #include <stdlib.h> using namespace ::pplx; using namespace utility; using namespace concurrency::streams; using namespace web; using namespace web::http; using namespace web::http::client; using namespace web::json; using namespace std; using namespace web; using namespace web::http; using namespace web::http::client; // Retrieves a JSON value from an HTTP request. pplx::task<void> RequestJSONValueAsync() { // TODO: To successfully use this example, you must perform the request // against a server that provides JSON data. // This example fails because the returned Content-Type is text/html and not application/json. http_client client(L"website.com/theRealURLContainsSecretKeys"); return client.request(methods::GET).then([](http_response response) -> pplx::task<json::value> { if (response.status_code() == status_codes::OK) { return response.extract_json(); } // Handle error cases, for now return empty json value... return pplx::task_from_result(json::value()); }) .then([](pplx::task<json::value> previousTask) { try { const json::value& v = previousTask.get(); // Perform actions here to process the JSON value... } catch (const http_exception& e) { // Print error. wostringstream ss; ss << e.what() << endl; wcout << ss.str(); } }); /* Output: Content-Type must be application/json to extract (is: text/html) */ } // Demonstrates how to iterate over a JSON object. void IterateJSONValue() { // Create a JSON object. json::value obj; obj[L"key1"] = json::value::boolean(false); obj[L"key2"] = json::value::number(44); obj[L"key3"] = json::value::number(43.6); obj[L"key4"] = json::value::string(U("str")); // Loop over each element in the object. for (auto iter = obj.cbegin(); iter != obj.cend(); ++iter) { // Make sure to get the value as const reference otherwise you will end up copying // the whole JSON value recursively which can be expensive if it is a nested object. const json::value &str = iter->first; const json::value &v = iter->second; // Perform actions here to process each string and value in the JSON object... std::wcout << L"String: " << str.as_string() << L", Value: " << v.to_string() << endl; } /* Output: String: key1, Value: false String: key2, Value: 44 String: key3, Value: 43.6 String: key4, Value: str */ } int wmain() { // This example uses the task::wait method to ensure that async operations complete before the app exits. // In most apps, you typically don�t wait for async operations to complete. wcout << L"Calling RequestJSONValueAsync..." << endl; RequestJSONValueAsync().wait(); wcout << L"Calling IterateJSONValue..." << endl; //IterateJSONValue(); system("pause"); }

我的问题是什么?我该如何解决?

1 个答案:

答案 0 :(得分:5)

json::value不包含成员函数cbegin()。如果您访问obj.as_object()obj.as_array(),则会找到您的开始/结束成员。

// Loop over each element in the object. 
for (const auto &pr : obj.as_object()) {
    std::wcout << L"String: " << pr.first << L", Value: " << pr.second << endl;
}