我想使用 nlohmann:json 解析带有 msgpack 数据的 boost::beast::flat_buffer

2023-12-25

所以我使用 boost::beast 作为 WebSocket 服务器。 我想接收二进制消息并使用 nlohmann::json 解析它。 但是我收到一条错误消息:

3 个重载都不能转换参数“nlohmann::detail::input_adapter”

这是一些代码:

        boost::beast::flat_buffer buffer;
        ws.read(buffer);
        if (!ws.got_text()) {
            ws.text(false);
            json request = json::from_msgpack(msgpack);
            ws.write( json::to_msgpack(request) ); // echo request back
        }

如果我尝试静态转换为 std::vector 我得到: E0312/没有合适的用户定义转换

        boost::beast::flat_buffer buffer;
        ws.read(buffer);
        if (!ws.got_text()) {
            ws.text(false);
            boost::asio::mutable_buffer req = buffer.data();
            //unsigned char* req2 = static_cast<unsigned char*>(req);                     // does not work
            //std::vector<std::uint8_t> req2 = static_cast<std::vector<std::uint8_t>>(req); // does not work
            json request = json::from_msgpack(buffer.data());
            ws.write(boost::asio::buffer(json::to_msgpack(request)));
        }

如何从缓冲区中获取二进制数据以便 nlohmann::json 可以解析它?


您可以使用基于迭代器的重载:

实时编译器资源管理器 https://godbolt.org/z/1q93EGMna

#include <boost/asio/buffers_iterator.hpp>
#include <boost/beast.hpp>
#include <boost/beast/websocket.hpp>
#include <nlohmann/json.hpp>

int main() {
    using nlohmann::json;
    using boost::asio::ip::tcp;
    boost::asio::io_context io;
    boost::beast::websocket::stream<tcp::socket> ws(io);

    boost::beast::flat_buffer buffer;
    ws.read(buffer);
    if (!ws.got_text()) {
        ws.text(false);

        auto req     = buffer.data();
        auto request = json::from_msgpack(buffers_begin(req), buffers_end(req));

        ws.write(boost::asio::buffer(json::to_msgpack(request)));
    }
}

ADL 将找到合适的重载(boost::asio::buffers_begin例如在这种情况下)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我想使用 nlohmann:json 解析带有 msgpack 数据的 boost::beast::flat_buffer 的相关文章

  • 在 LINQ 查询中返回不带时间的日期

    我正在编写一个查询 我想计算按日期联系我们的呼叫中心的次数 看起来很简单 但由于联系日期字段是日期时间字段 我得到了时间 因此当我按联系日期 时间 分组时 每个联系日期实例的计数为 1 所以 我想只按日期分组 而不按时间分组 下面是我用来查
  • 创建 DirectoryEntry 实例以供测试使用

    我正在尝试创建 DirectoryEntry 的实例 以便可以使用它来测试将传递 DirectoryEntry 的一些代码 然而 尽管进行了很多尝试 我还是找不到实例化 DE 并初始化它的 PropertyCollection 的方法 我有
  • 模板类的不明确多重继承

    我有一个真实的情况 可以总结为以下示例 template lt typename ListenerType gt struct Notifier void add listener ListenerType struct TimeListe
  • C++ 求二维数组每一行的最大值

    我已经设法用这个找到我的二维数组的每一行的最小值 void findLowest int A Cm int n int m int min A 0 0 for int i 0 i lt n i for int j 0 j lt m j if
  • 如何在没有 Control.Invoke() 的情况下从后台线程修改控件属性

    最近 我们遇到了一些旧版 WinForms 应用程序 我们需要更新一些新功能 在专家测试该应用程序时 发现一些旧功能被破坏 无效的跨线程操作 现在 在您认为我是新手之前 我确实有一些 Windows 窗体应用程序的经验 我不是专家 但我认为
  • Cygwin 下使用 CMake 编译库

    我一直在尝试使用 CMake 来编译 TinyXML 作为一种迷你项目 尝试学习 CMake 作为补充 我试图将其编译成动态库并自行安装 以便它可以工作 到目前为止 我已经设法编译和安装它 但它编译成 dll 和 dll a 让它工作的唯一
  • 为什么禁止在 constexpr 函数中使用 goto?

    C 14 对你能做什么和不能做什么有规则constexpr功能 其中一些 没有asm 没有静态变量 看起来相当合理 但标准也不允许goto in constexpr功能 即使它允许其他控制流机制 这种区别背后的原因是什么 我以为我们已经过去
  • C# 中值类型和引用类型有什么区别? [复制]

    这个问题在这里已经有答案了 我知道一些差异 值类型存储在堆栈上 而引用类型存储在托管堆上 值类型变量直接包含它们的值 而引用变量仅包含对托管堆上创建的对象位置的引用 我错过了任何其他区别吗 如果是的话 它们是什么 请阅读 堆栈是一个实现细节
  • 使用 Google Analytics API 在 C# 中显示信息

    我一整天都在寻找一个好的解决方案 但谷歌发展得太快了 我找不到有效的解决方案 我想做的是 我有一个 Web 应用程序 它有一个管理部分 用户需要登录才能查看信息 在本节中 我想显示来自 GA 的一些数据 例如某些特定网址的综合浏览量 因为我
  • c# Asp.NET MVC 使用FileStreamResult下载excel文件

    我需要构建一个方法 它将接收模型 从中构建excel 构建和接收部分完成没有问题 然后使用内存流导出 让用户下载它 不将其保存在服务器上 我是 ASP NET 和 MVC 的新手 所以我找到了指南并将其构建为教程项目 public File
  • HttpClient 像浏览器一样请求

    当我通过 HttpClient 类调用网站 www livescore com 时 我总是收到错误 500 可能服务器阻止了来自 HttpClient 的请求 1 还有其他方法可以从网页获取html吗 2 如何设置标题来获取html内容 当
  • 基于范围的 for 循环中的未命名循环变量?

    有没有什么方法可以不在基于范围的 for 循环中 使用 循环变量 同时也避免编译器发出有关未使用它的警告 对于上下文 我正在尝试执行以下操作 我启用了 将警告视为错误 并且我不想进行像通过在某处毫无意义地提及变量来强制 使用 变量这样的黑客
  • 使用向量的 merge_sort 在少于 9 个输入的情况下效果很好

    不知何故 我使用向量实现了合并排序 问题是 它可以在少于 9 个输入的情况下正常工作 但在有 9 个或更多输入的情况下 它会执行一些我不明白的操作 如下所示 Input 5 4 3 2 1 6 5 4 3 2 1 9 8 7 6 5 4 3
  • Windows 窗体不会在调试模式下显示

    我最近升级到 VS 2012 我有一组在 VS 2010 中编码的 UI 测试 我试图在 VS 2012 中启动它们 我有一个 Windows 窗体 在开始时显示使用 AssemblyInitialize 属性运行测试 我使用此表单允许用户
  • 我的 strlcpy 版本

    海湾合作委员会 4 4 4 c89 我的程序做了很多字符串处理 我不想使用 strncpy 因为它不会终止 我不能使用 strlcpy 因为它不可移植 只是几个问题 我怎样才能让我的函数正常运行 以确保它完全安全稳定 单元测试 这对于生产来
  • 像“1$”这样的位置参数如何与 printf() 一起使用?

    By man I find printf d width num and printf 2 1 d width num 是等价的 但在我看来 第二种风格应该与以下相同 printf d num width 然而通过测试似乎man是对的 为什
  • 用 C 实现 Unix shell:检查文件是否可执行

    我正在努力用 C 语言实现 Unix shell 目前正在处理相对路径的问题 特别是在输入命令时 现在 我每次都必须输入可执行文件的完整路径 而我宁愿简单地输入 ls 或 cat 我已经设法获取 PATH 环境变量 我的想法是在 字符处拆分
  • 作为字符串的动态属性名称

    使用 DocumentDB 创建新文档时 我想设置属性名称动态地 目前我设置SomeProperty 像这样 await client CreateDocumentAsync dbs db colls x new SomeProperty
  • 如何使用 ReactiveList 以便在添加新项目时更新 UI

    我正在创建一个带有列表的 Xamarin Forms 应用程序 itemSource 是一个reactiveList 但是 向列表添加新项目不会更新 UI 这样做的正确方法是什么 列表定义 listView new ListView var
  • C++ 成员函数中的“if (!this)”有多糟糕?

    如果我遇到旧代码if this return 在应用程序中 这种风险有多严重 它是一个危险的定时炸弹 需要立即在应用程序范围内进行搜索和销毁工作 还是更像是一种可以悄悄留在原处的代码气味 我不打算writing当然 执行此操作的代码 相反

随机推荐

  • OpenCV 中的图像旋转(90 度)

    谁能告诉我如何将图像旋转 90 度 opencv中有实现的函数吗 我认为图像转置与 90 度旋转 顺时针和逆时针 完全不同 这不是最有效的方法 但很简单 CV 转置 img res 简历 翻转 RES RES 1
  • Python Find max in dataframe 列以循环查找所有值

    所以我有一个使用 pandas 的大型数据框 当我做max df A 它报告最多9999当它应该是396450通过观察 import numpy as numpy import pandas as pd f open 20170901 as
  • 在 DDD 中,实体和存储库可以从多个表中提取数据吗?

    我对 DDD 很陌生 我正在尝试正确实现我的用例 我有多个实体 它们都捆绑在一起 就像通常的聚合示例一样Order其中封装了LineItem 根据我对基本 DDD 的理解 我倾向于创建 2 个实体 一个用于订单 另一个用于行项目 但似乎有
  • 是否有关于 IL 反汇编器图标的描述

    我正在使用 MS IL 反汇编程序 它可以让您查看 Net 程序集的内容 类和接口显示在树视图中 用颜色和图标很好地编码 猜测大多数图标的含义相当容易 例如带有大写 I 的蓝色图标是一个界面 带有 E 的灰色图标是一个枚举 但有些项目 特别
  • 使用 interp 推断数据无法生成准确的图像

    我有一个图表 其中外推法与初始插值法不匹配 我希望热图填充整个图像 一 插值代码 library akima library reshape2 xmin lt signif min CBLo2 MD1 xmax lt signif max
  • phpmailer:仅使用“回复”地址回复

    我在我的网站上使用 phpmailer 为了帮助解决垃圾邮件问题 我创建了一个邮箱来发送这些电子邮件 使用 SMTP 我已设置要发送的电子邮件from邮箱地址 然后我添加了一个reply to我想要回复的地址 mail new PHPMai
  • 两个重载函数相似如何更好的设计

    我正在开发一个 C 项目 我有一个案例如下 void func int a int b if some bool generateString generateFunc different for auto it myVector do s
  • java.nio.file.InvalidPathException:格式错误的输入或使用国家字符时输入包含无法映射的字符

    我正在尝试创建一些具有国家符号 如 等 的目录 不幸的是 每当尝试这样做时 我都会遇到此异常 java nio file InvalidPathException Malformed input or input contains unma
  • JQuery 垂直无限轮播

    我过去两个小时一直在寻找 是否有任何 jQuery 插件可以实现垂直无限轮播效果 更具体地说 这是所需的布局 不幸的是 我现在确实没有经验 也没有时间学习 以便通过纯粹的创作来实现这一目标 即使只是为我指明正确的方向也会很棒 非常感谢任何帮
  • 是否有 MSBuild 任务会将行写入文件的 *start* ?

    我正在使用 WriteLinesToFile 来更新更改日志文件 txt 它将文本附加到文件末尾 理想情况下 我希望能够将更改写入start该文件的 是否有一个简单的任务 例如在社区或扩展包中 可以执行此操作 我在自定义任务包中没有看到类似
  • 有没有办法判断 ES6 Promise 是否已履行/拒绝/解决? [复制]

    这个问题在这里已经有答案了 我习惯了 Dojo Promise 我可以执行以下操作 promise isFulfilled promise isResolved promise isRejected 有没有办法确定 ES6 Promise
  • 如何创建一个运算符来实现错误链?

    我想实现以下运算符 throwingFunction arg T doStuff if throwingFunction throws an error print or log the error else returns an obje
  • RecyclerView 与 ListView

    来自 Android 开发者 创建列表和卡片 http developer android com training material lists cards html RecyclerView 小部件是更高级 更灵活的版本 列表显示 好吧
  • 单击 wpf 中的按钮时播放 wav 声音

    我想在整个应用程序中通过按钮单击事件的单击事件来播放声音 我发现 1 个代码在单击按钮时播放声音 private void btn Click object sender RoutedEventArgs e MediaPlayer mpla
  • Java 中的 LRU 缓存,具有泛型和 O(1) 操作

    这是求职面试中经常出现的问题 这个想法是定义一个数据结构而不是使用Java内置的LinkedHashMap LRU 缓存会删除最近最少使用条目插入一个新条目 因此 考虑到以下场景 A B C D E 其中 A 是最近最少使用的项目 如果我们
  • 为什么谷歌浏览器提示“选择一个证书来验证自己的身份”

    我有一个应用程序在 Tomcat 服务器中运行 该服务器位于具有正确证书的 NginX 后面 当我尝试在 Mac OS X 中使用 Chrome 访问此应用程序时 浏览器中会弹出 选择一个证书来验证您自己的身份 我想避免这种情况 为此 我需
  • 如何使用 javascript 从字符串中删除 ¶

    这个问题在这里已经有答案了 我正在使用 diff api 工具创建一个很好的 diff 来显示更改的文本 我正在使用谷歌差异工具 https code google com archive p google diff match patch
  • 如何创建一个简单的基本单例?

    我的目的是创建一个单例 但不知道如何在 Rust 中处理这个 我读过this https stackoverflow com questions 27791532 how do i create a global mutable singl
  • Google 日历 API 400 响应

    我正在尝试在 Google Calendar API 上执行简单的忙闲查询 我的授权一切正常 可以查看用户日历列表等 当我尝试提交忙 闲查询时 我收到 400 错误 据我所知 根本没有关于它的详细信息不喜欢 无论是在我自己的代码中还是在我使
  • 我想使用 nlohmann:json 解析带有 msgpack 数据的 boost::beast::flat_buffer

    所以我使用 boost beast 作为 WebSocket 服务器 我想接收二进制消息并使用 nlohmann json 解析它 但是我收到一条错误消息 3 个重载都不能转换参数 nlohmann detail input adapter