有人可以给出一个在 C++ 中返回 map 的函数的实际例子。
我尝试了其他帖子的答案,但我不知道如何申请。
这是我的工作代码:
auto DataArray = jvalue.at(U("data")).as_array();
//Make an associative array or map with key value pair from extracted json data
std::map<int, std::string> staffMap;
// loop through 'data' object
for (int i = 0; i < DataArray.size(); i++)
{
try
{
auto data = DataArray[i];
auto dataObj = data.as_object();
int key;
std::string value;
// loop through each object of 'data'
for (auto iterInner = dataObj.cbegin(); iterInner != dataObj.cend(); ++iterInner)
{
auto &propertyName = iterInner->first;
auto &propertyValue …Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个基于Windows的VC++ DLL(在VS 2015中)静态链接到Casablanca CPPREST SDK.也就是说,我想要一个包含CPP REST库以及我的代码的DLL输出.
我已经提到过这个帖子,但它似乎过时了(并且链接断了):
https://katyscode.wordpress.com/2014/04/01/how-to-statically-link-the-c-rest-sdk-casablanca/
我试图从GitHub下载Casablanca repo并编译产生lib文件的"cpprestsdk140.static"项目.问题是当我将它与我的项目链接时,我得到了许多未解决的外部因素.
许多人评论了上述URL中未解决的链接错误.Github上还有许多线程,人们说他们无法将简单项目与静态库链接起来.
有没有人有一套明确的步骤可以帮助解决这个问题?
我正在连接一个总是以JSON回复的WebSocket.我看到有一种extract_string方法,websocket_incoming_message但是在尝试了很多东西后json:value,似乎你只能通过逐个插入键值对来实时构建JSON数组.我在这里遗漏了什么或有没有办法从输出中websocket_incoming_message直接将其转换为json:value数组?
wsClient.set_message_handler([=](websocket_incoming_message msg)
{
// handle message from server...
printf("[WebSocket INBOUND]: %s", msg.extract_string().get().c_str());
printJSON(json::value::parse(conversions::to_string_t(msg.extract_string().get())));
});
Run Code Online (Sandbox Code Playgroud)
printJSON遍历json::value并打印每个键值对.
RestAPI.exe中0x00007FF866923FB8处的未处理异常:Microsoft C++异常:内存位置0x0000003E553FDDC0处的web :: json :: json_exception.发生了
控制台输出:
[WebSocket INBOUND]:{"t":null,"s":null,"op":10,"d":{"heartbeat_interval":41250,"_ trace":["gateway-prd-main-cr3x"] }}
即使我们可以编译并运行应用程序,我认为由于传递包含JSON表而不是单个元素的字符串这一事实导致异常?这是否意味着我需要手动解析字符串并拉出每个键值对,同时构建json数组?
必须有办法做到这一点,它似乎是基本需要的功能..
这里的任何帮助将不胜感激!感谢您的时间.
我最近使用了swagger-codegen为我的swagger规范生成了cpprest客户端代码。该代码全部在我的C ++应用程序中编译和链接。
但是,实际上我该如何在C ++应用程序中使用它呢?我似乎已经初始化了ApiClient和ApiConfiguration。但是我不清楚如何将getXXX()调用合并到我的API对象中(例如:DefaultApi)。
我对源代码进行了相当广泛的互联网搜索,以使用生成的客户端代码进行演示,但无济于事。我还注意到这里有cpprest的swagger-codegen示例petstore客户端库:(https://github.com/swagger-api/swagger-codegen/tree/master/samples/client/petstore/cpprest),但是哪里有测试线束吗?
我正在尝试安装 cpprestsdk 并将其添加到我的 c++ 项目中,但我似乎不知道如何执行此操作。
我已按照此处的说明进行操作:
https://github.com/Microsoft/cpprestsdk/wiki/How-to-build-for-Mac-OS-X
这让我在 cassablanca 包上构建并运行测试,结果成功。
然后我尝试遵循本指南:
https://github.com/Microsoft/cpprestsdk/wiki/Getting-Started-Tutorial
但是当尝试包含头文件时,例如:
#include "<cpprest/http_client.h>"
#include <cpprest/filestream.h>
Run Code Online (Sandbox Code Playgroud)
运行我的 make 文件时出现错误。
我一直在尝试找到一些有关如何在编译时将文件实际添加到我的构建中的文档,但一直找不到任何内容。
这是我的 makefile 的内容:
CC := g++
CFLAGS := -std=c11
csrc = $(wildcard src/*.cpp) \
$(wildcard include/*.hpp) \
$(wildcard libs/*)
obj = $(csrc:.c=.o)
LDFLAGS = -Wall -lcpprest
localcoin: $(obj)
$(CC) $^ $(LDFLAGS)
Run Code Online (Sandbox Code Playgroud)
运行 make 时,我收到大量源自 cassablanca 安装文件的错误。
我是 C++/C 编程新手,所以对 makefile 的经验很少。
我的问题是,如何将 cpprestsdk 添加到我的项目中以便我可以成功使用该库?
非常感谢您抽出宝贵时间,我们将不胜感激任何批评或指导。
我在 Visual C++ 2013 中有一个 C++ 应用程序,它使用 cpprestsdk 从服务器获取信息。它工作正常(这里是一个例子)
现在,我正在使用外部第三方 API,该 API 有一个返回字符串的方法,如下所示:
{"result":{"data":[{"PetId":"Pet1","PetName":"Name1","PetCategory":"1"},{"PetId":"Pet2","PetName":"Name2","PetCategory":"2"},{"PetId":"Pet3","PetName":"Name3","PetCategory":"3"}],"code":"200","msg":"Operation succeeded"}}
Run Code Online (Sandbox Code Playgroud)
如何使用 cpprestsdk 将此字符串转换为 web::json 以便迭代“宠物集合”?
我在使用 CPP REST SDK 的 JSON 类时遇到了问题。我不知道什么时候使用json::value,json::object和json::array。尤其是后两者看起来很像。的用法json::array对我来说也很不直观。最后,我想将 JSON 写入文件或至少写入 stdcout,以便我可以检查它是否正确。
使用 json-spirit 对我来说更容易,但是因为我想稍后发出 REST 请求,所以我想我会省掉字符串/wstring 的疯狂并使用 CPP REST SDK 的 json 类。
我想要实现的是一个像这样的 JSON 文件:
{
"foo-list" : [
{
"bar" : "value1",
"bob" : "value2"
}
]
}
Run Code Online (Sandbox Code Playgroud)
这是我试过的代码:
json::value arr;
int i{0};
for(auto& thing : things)
{
json::value obj;
obj[L"bar"] = json::value::string(thing.first);
obj[L"bob"] = json::value::string(thing.second);
arr[i++] = obj;
}
json::value result;
result[L"foo-list"] = arr;
Run Code Online (Sandbox Code Playgroud)
我真的需要这个额外的计数器变量i吗?显得比较不雅观。使用 json::array/json::object 会让事情变得更好吗?以及如何将我的 JSON …
我一直在为我的应用程序使用CPP Rest SDK,它同时用作 HTTP_Client 和 HTTP_Server。现在我想在我的应用程序中支持 HTTPS。
HTTP_Client 将在 HTTP 中运行,HTTP_Server 将作为 HTTPS 运行。
由于客户端不需要身份验证:
我只想无视 CERTIFICATE_ERROR
但是我在 CPP REST SDK 中找不到任何这样的选项。
请帮忙,我需要知道如何忽略
注意:我的应用程序使用 Visual Studio 2013
return client.request(methods::GET).then([](http_response response) -> pplx::task<json::value>
{
if (response.status_code() == status_codes::OK)
{
std::cout << "status ok";
response.headers().set_content_type(L"application/json");
return response.extract_json();
}
// Handle error cases, for now return empty json value...
std::cout << "get json data";
return pplx::task_from_result(json::value());
})
.then([](pplx::task<json::value> previousTask)
{
try
{
std::cout << "parse json data";
const json::value& v = previousTask.get();
utility::string_t jsonval = v.serialize();
json::value root;
// DisplayJSONValue(v);
wcout << jsonval;
// wcout<<jsonval.data.id;
// Perform actions here to process the JSON value...
//std::cout << v;
//IterateJSONValue();
}
catch …Run Code Online (Sandbox Code Playgroud) 我有一个 CentOS 7(已注册 EPEL-Repo),但我在 repos 中没有找到 CPP-REST 的包(Debian 中的 libcpprest-dev)。
我需要从 vanilla 安装它还是 CentOS 中有一个软件包?
谢谢!
背景
我正在尝试为在 Raspberry 3 上运行的 Rasbian 构建一个示例 REST api 应用程序。我使用cpprestsdk.
示例包含以下头文件:
#include <condition_variable>
#include <mutex>
#include <iostream>
static std::condition_variable _condition;
static std::mutex _mutex;
namespace cfx {
class InterruptHandler {
public:
static void hookSIGINT() {
signal(SIGINT, handleUserInterrupt);
}
static void handleUserInterrupt(int signal){
if (signal == SIGINT) {
std::cout << "SIGINT trapped ..." << '\n';
_condition.notify_one();
}
}
static void waitForUserInterrupt() {
std::unique_lock<std::mutex> lock { _mutex };
_condition.wait(lock);
std::cout << "user has signaled to interrup program..." << '\n';
lock.unlock();
} …Run Code Online (Sandbox Code Playgroud) 我正在处理这个代码,它接收一个 cpprest sdk 响应,其中包含一个 base64_encoded 有效负载,它是一个 json。这是我的代码片段:
typedef std::wstring string_t; //defined in basic_types.h in cpprest lib
void demo() {
http_response response;
//code to handle respose ...
json::value output= response.extract_json();
string_t payload = output.at(L"payload").as_string();
vector<unsigned char> base64_encoded_payload = conversions::from_base64(payload);
std::string utf8_payload(base64_encoded_payload.begin(), base64_encoded_payload.end()); //in debugger I see the Japanese chars are garbled.
string_t utf16_payload = utf8_to_utf16(utf8_payload); //in debugger I see the Japanese chars are good here
//then I need to process the utf8_payload which is an xml.
//I have an API available …Run Code Online (Sandbox Code Playgroud) 我正在尝试通过查看 cpprestSDK 的示例代码来制作服务器。但是我不知道为什么我在示例代码中绑定。
下面是示例代码。
标准文件文件
class Handler{
public:
Handler() {};
Handler(utility::string_t url);
pplx::task<void> open() { return m_listener.open(); }
pplx::task<void> close() { return m_listener.close(); }
private:
void handle_get(http_request request);
void handle_put(http_request request);
void handle_post(http_request request);
void handle_del(http_request request);
};
Run Code Online (Sandbox Code Playgroud)
处理程序
#include "stdafx.hpp"
Handler::Handler(utility::string_t url) : m_listener(url)
{
m_listener.support(methods::GET, std::bind(&Handler::handle_get, this, std::placeholders::_1));
m_listener.support(methods::PUT, std::bind(&Handler::handle_put, this, std::placeholders::_1));
m_listener.support(methods::POST, std::bind(&Handler::handle_post, this, std::placeholders::_1));
m_listener.support(methods::DEL, std::bind(&Handler::handle_del, this, std::placeholders::_1));
}
Run Code Online (Sandbox Code Playgroud)
查看支持的参考,它的定义如下。
void support (const http::method &method, const std::function< void(http_request)> &handler)
我以为我可以这样定义它:
m_listener.support(methods::GET, &Handler::handle_get);
但它失败了。
你能告诉我为什么我在绑定时使用“this”和“std::placeholders::_1”吗?
示例代码:https …