gpt4 book ai didi

C++ Rest 在尝试从 Web 显示 JSON 文件时给我一个错误

转载 作者:搜寻专家 更新时间:2023-10-31 00:30:10 37 4
gpt4 key购买 nike

我正在尝试制作一个可以使用 C++ 的 REST API 在控制台中显示 JSON 文件的程序。我正在尝试从 api.trello.com 获取 JSON 文件,但我遇到的每个示例都会给我一个错误,通常是关于 cbegin() & cend() 和为什么它不是 web::json::value 的值...

这是我的代码:

// 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");
}

我在 VS 2015 中遇到这个错误。

唯一的错误在 IterateJSONValue()

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

最佳答案

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;
}

关于C++ Rest 在尝试从 Web 显示 JSON 文件时给我一个错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38080813/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com