标签: msgpack

将msgpack-python与嵌套namedtuples一起使用

我的数据结构是这样的:

user = UserTuple(
    name=u'Anakin', surname=u'Skywalker', birthdate=datetime.date(1981, 7, 25),
    profile=ProfileTuple(avatar=u'http://localhost/profile.jpg')
)
Run Code Online (Sandbox Code Playgroud)

我想用msgpack-python模块打包这些数据。但是msgpack将namedtuples转换为列表。可以使用msgpack打包这样的数据并保留namedtuple,就像泡菜/腌黄瓜一样吗?

python msgpack

3
推荐指数
1
解决办法
805
查看次数

使用 utf-8 字符串解码 msgpack_numpy

我使用 python 3.6msgpack==0.5.1msgpack_numpy==0.4.2.

尝试对 a 进行编码和解码时dict需要使用utf-8将 dict 的键恢复为字符串(而不是二进制文件)字符串。

例如:

import msgpack

d = {'key': None}
binary = msgpack.packb(d)

ret = msgpack.unpackb(binary)
ret.keys()
>>> dict_keys([b'key'])

ret = msgpack.unpackb(binary, encoding='utf-8')
ret.keys()
>>> dict_keys(['key'])
Run Code Online (Sandbox Code Playgroud)

但是,在使用时msgpack_numpy,传递会encoding='utf-8'阻止numpy解码:

import numpy as np
import msgpack_numpy as m
m.patch()

d['key'] = np.arange(5)
binary = msgpack.packb(d)

ret = msgpack.unpackb(binary)
ret.keys()
>>> dict_keys([b'key'])
ret[b'key']
>>> array([0, 1, 2, 3, 4])

ret = msgpack.unpackb(binary, encoding='utf-8') …
Run Code Online (Sandbox Code Playgroud)

python encoding numpy utf-8 msgpack

3
推荐指数
1
解决办法
692
查看次数

带有 redis 的消息包,其中数据大小不大

Redis 是一种数据结构存储,但仍建议使用消息包(或 protobuf)来序列化/反序列化数据。如果写入 Redis 的数据块不是很大,我对 Redis 上的 Messagepack 有点困惑。

因为,Messagepack 需要根据自己的协议打包和解包数据,并且肯定会产生一些成本,并且打包的数据将仅作为“字符串”数据类型存储在 Redis 上。

为了利用 Redis 作为数据结构服务器,可以编写一个薄层来直接读取/写入 Redis 数据结构,比如说在 C++ 和 Python 之间,那么消息包到底适合哪里?

有人可以在 redis 的上下文中对消息包有所了解吗?

问候,
拉胡尔

免责声明 - 无意冒犯 Messagepack 功能,我知道它真的很棒:-)

redis msgpack

3
推荐指数
1
解决办法
3539
查看次数

在将日期时间传递给 AspNetCore.SignalR .Net 客户端时避免日期时间转换

我正在尝试将请求从服务器发送到客户端(.Net),该客户端在文化特定环境中运行,这会影响特殊时区的日期。

我从服务器发送未指定类型的日期,以避免在客户端检索时对其进行转换。基本上我只是在服务器端像这样转换它:

DateTime dateToSend = DateTime.SpecifyKind(serverSideDate, DateTimeKind.Unspecified);
Run Code Online (Sandbox Code Playgroud)

问题是,当客户端使用JsonProtocol时,日期没有被转换并且得到正确处理,而对于MessagePackProtocol,客户端和服务器端的相同代码的工作方式完全不同 - 它将日期转换为客户端上的文化特定时区。 。

如何防止这种转换,而不需要一些黑客解决方案,例如将日期作为字符串传递。

更新:
正如 Shaun 所建议的,我已经以这种方式在客户端和服务器端配置了 MessagePack,但不幸的是它仍然无法正常工作:

.AddMessagePackProtocol(options =>
    options.FormatterResolvers = new List<MessagePack.IFormatterResolver>()
    {
        StandardResolver.Instance,
        NativeDateTimeResolver.Instance
    })
Run Code Online (Sandbox Code Playgroud)

msgpack signalr signalr.client asp.net-core asp.net-core-signalr

3
推荐指数
1
解决办法
2102
查看次数

如何解决 ModuleNotFoundError: PyInstaller 中没有名为“srsly.msgpack.util”的模块?

我正在尝试使用 PyInstaller 将 python 脚本转换为 .exe。该脚本被转换为exe,没有任何错误日志。

但是,在运行 .exe 文件时,出现ModuleNotFoundError: No module named 'srsly.msgpack.util'

打开 PyInstaller 和 cx_Freeze 生成的 exe 文件时会出现此问题。 此处附有错误的屏幕截图。

已尝试更新、卸载并重新安装软件包,但问题仍然存在。

版本:

  • 蟒蛇:3.7
  • 操作系统:Windows 10
  • cx_冻结:6.0
  • 消息包:0.6.2
  • py安装程序:3.5
  • srsly:0.1.0

python pyinstaller python-3.x msgpack

3
推荐指数
1
解决办法
2963
查看次数

如何在 C# 中保存并附加到序列化的 MessagePack 二进制文件?

我试图用来MessagePack保存多个结构列表,因为我读到它的性能比BinaryFormatter序列化更好。

我想要做的是接收实时时间序列数据并定期将其保存(附加)到磁盘上,例如,如果列表的元素数为 100。我的问题是:

1)在这种情况下,序列化结构列表并将其异步保存到磁盘是否更好?

2) 如何使用 MessagePack 简单地将其保存到磁盘?

public struct struct_realTime
{
    public int indexNum { get; set; }
    public string currentTime { get; set; }
    public string currentType { get; set; }
}

class Program
{
    static void Main(string[] args)
    {
        List<struct_realTime> list_temp = new List<struct_realTime>(100000);

        for (int num=0; num < 100000; num++)
        {
            list_temp.Add(new struct_realTime
            {
                indexNum = 1,
                currentTime = "time",
                currentType = "type",
            });
        }

        string filename = "file.bin";

        using (var fileStream …
Run Code Online (Sandbox Code Playgroud)

c# serialization msgpack

3
推荐指数
1
解决办法
1823
查看次数

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

所以我使用 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
        }
Run Code Online (Sandbox Code Playgroud)

如果我尝试静态转换为 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)));
        }
Run Code Online (Sandbox Code Playgroud)

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

c++ boost boost-asio msgpack nlohmann-json

3
推荐指数
1
解决办法
1492
查看次数

使用python将messagePack解析为Json

我有那个缓冲区

87 a1 41 a4 31 32 33 34 a1 42 a4 61 62 63 64 a1 43 a1 61 a1 44 a8 31 31 31 31 31 31 31 31 a1 45 a8 75 73 65 72 6e 61 6d 65 a1 46 a4 6e 61 6d 65 a1 47 a7 6e 61 6d 65 5f 6e 61
Run Code Online (Sandbox Code Playgroud)

我想解析这个 json

{
    "A": "1234",
    "B": "abcd",
    "C": "a",
    "D": "11111111",
    "E": "username",
    "F": "name",
    "G": "name_na"
}
Run Code Online (Sandbox Code Playgroud)

网络货架

请问我怎样才能用Python做到这一点?

python json python-3.x msgpack

3
推荐指数
1
解决办法
1409
查看次数

使用msgpack通过zeromq发送矢量

我似乎不能送vectorstruct,我通过ZeroMQ序列与msgpack.

它是这个结构的向量:

struct MyData
{
    MyData() : id(0), x(0), y(0), a(0) {}
    MyData(const Obj &r) : id(0), x(r.pose[0]), y(r.pose[1]), a(r.pose[2]) {}
    MyData(const Obj *r) : id(0), x(r->pose[0]), y(r->pose[1]), a(r->pose[2]) {}
    double id;
    double x;
    double y;
    double a;
    MSGPACK_DEFINE(id, x, y, a);
};
Run Code Online (Sandbox Code Playgroud)

在发送方:

data 是一个 std::vector<MyData>

msgpack::sbuffer sbuf;
msgpack::pack(sbuf, data);
zmq::message_t msg(sbuf.data(), sizeof(char *) * sbuf.size(), NULL, NULL);
local_socket->send(msg); // this is just zeromq's send function
Run Code Online (Sandbox Code Playgroud)

难道我构建我sbuffer还是message_t错了吗?

在接收方:

我不确定我是否应该投射,msg.data()但我找不到任何关于如何使用ZeroMQ和messagepack的好文档. …

c++ zeromq messagepack msgpack

2
推荐指数
1
解决办法
2826
查看次数

MessagePack C API

在着眼于C API为MessagePack,有多个功能以适当地串行化(包)中的数据,根据类型:msgpack_pack_uint8,msgpack_pack_int32,...

在API中似乎没有相应的调用来解压缩数据. msgpack_unpack_next返回一个msgpack_object.这些对象仅具有粗粒度类型(类型中最大的:int64,double,...),基于所包含的枚举.

我在这里错过了什么吗?是期望使用粗物体然后再施放?

如何正确拆包?

此外,有没有好的文档或用法示例?网站上的那些是微不足道的.

c messagepack msgpack

1
推荐指数
1
解决办法
3599
查看次数

使用msgpack编码时,JavaScript对象的Rust等效项是什么?

我正在尝试移植一个使用msgpack将JavaScript对象编码为Rust 的JavaScript 。我找到了一个用于msgpack编码/解码的Rust库,但是我没有得到Rust中的等效输入格式。

这个用于编码对象的JavaScript代码{"a": 5, "b": 6} 给出了输出82 a1 61 03 a1 62 05

const msgpack = require("msgpack-lite");
msgpack.encode(obj);
Run Code Online (Sandbox Code Playgroud)

我尝试将对象表示为Rust结构并使用rmp-serde库对其进行编码

use rmp_serde::{Deserializer, Serializer};
use serde::{Deserialize, Serialize};

#[derive(Debug, Serialize, Deserialize)]
pub struct Test {
    a: u32,
    b: u32,
}

fn main() {
    let mut buf = Vec::new();
    let val = Test { a: 3, b: 5 };
    val.serialize(&mut Serializer::new(&mut buf)).unwrap();
    println!("{:?}", buf);
}
Run Code Online (Sandbox Code Playgroud)

我得到了输出[146, 3, 5]。如何在Rust中表示JSON输入?

rust msgpack

1
推荐指数
1
解决办法
126
查看次数

为什么C ++ msgpack-c在数字10(0x0A)之前添加数字13(0x0D),而C#MessagePack-CSharp却不呢?

我试图使用MessagePack在C ++和Windows的C#中将0到127之间的整数序列化,但是结果不一样。msgpack-c在0x09和0x0A之间插入0x0D,但MessagePack-CSharp不插入。这是为什么?

作业系统:Windows 10

IDE:Visual Studio 2019

C#

图书馆:

https://github.com/neuecc/MessagePack-CSharp

码:

using System.Collections.Generic;
using System.IO;

class Program
{
    static void Main(string[] args)
    {
        using (FileStream fileStream = new FileStream("CSharp.msgpack", FileMode.Create, FileAccess.Write))
        {
            List<int> list = new List<int>();

            for (int i = 0; i < 128; ++i)
            {
                list.Add(i);
            }

            MessagePackSerializer.Serialize(fileStream, list);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

结果:

尖锐的

C ++

图书馆:

https://github.com/msgpack/msgpack-c

码:

#include <msgpack.hpp>
#include <vector>
#include <iostream>
#include <fstream>

int main(void)
{
    std::ofstream OutputFileStream;

    std::vector<int> list;

    for (int i = 0; …
Run Code Online (Sandbox Code Playgroud)

c# c++ binary-serialization msgpack

0
推荐指数
1
解决办法
70
查看次数