c - MsgPuck : 如何在 msgpuck 中组成地图数组?
问题描述
我正在尝试使用MsgPuck 库为以下 JSON 对象构造一个MsgPack对象:
{
"Key_1": "val_1",
"array_1": [
{
"key_3": "val_3",
"key_4": "val_4"
}
]
}
以下是我的代码:
{
char buff[1024];
char *ptr = buff;
ptr = mp_encode_map(ptr, 2);
ptr = mp_encode_str(ptr, "key_1", strlen("key_1"));
ptr = mp_encode_str(ptr, "val_1", strlen("val_1"));
ptr = mp_encode_str(ptr, "array_1", strlen("array_1"));
ptr = mp_encode_array(ptr, 2);
ptr = mp_encode_map(ptr, 2);
ptr = mp_encode_str(ptr, "key_3", strlen("key_3"));
ptr = mp_encode_str(ptr, "val_3", strlen("val_3"));
ptr = mp_encode_str(ptr, "key_4", strlen("key_4"));
ptr = mp_encode_str(ptr, "val_4", strlen("val_4"));
FILE *fp = fopen("/tmp/test.mp","w");
fwrite(buff, 1, ptr - buff, fp);
fclose(fp);
}
但是生成的 MsgPack 数据如下:
$ xxd /tmp/test.mp
00000000: 82a5 6b65 795f 31a5 7661 6c5f 31a7 6172 ..key_1.val_1.ar
00000010: 7261 795f 3192 82a5 6b65 795f 33a5 7661 ray_1...key_3.va
// Expected val 91 -> ^^
00000020: 6c5f 33a5 6b65 795f 34a5 7661 6c5f 34 l_3.key_4.val_4
我在这里做错了什么?
编辑:
我在代码中发现了问题:我应该使用,
ptr = mp_encode_array(ptr, 1);
代替
ptr = mp_encode_array(ptr, 2);
解决方案
我在代码中发现了问题:我应该使用,
ptr = mp_encode_array(ptr, 1);
代替
ptr = mp_encode_array(ptr, 2);
– 用户58626
推荐阅读
- flutter - Flutter Web 是否有任何 Twitter 身份验证?
- asynchronous - 如何在启动异步操作和在循环中等待其结果之间有一个宽限期?
- python - Python中函数内的for循环
- reporting-services - SSRS 折线图基于 X 轴值的动态最大 Y 轴
- windows - Windows 窗体程序将菜单项显示为在设计器中选中,并在程序运行时显示为彩色块
- mysql - Mysql 子查询别名与存在和联合所有
- javascript - 根据 JSON 中的键值呈现元素
- react-native - 如何在本机反应中更改子字符串样式
- azure - 如何在不将其添加到防火墙的情况下从本地计算机连接到 azure sql?注意 - 公共访问已关闭
- vb.net - 我可以从文本文件中创建一个子例程吗