首页 > 解决方案 > 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);

标签: cjsonserializationmsgpack

解决方案


我在代码中发现了问题:我应该使用,

 ptr = mp_encode_array(ptr, 1);

代替

 ptr = mp_encode_array(ptr, 2);

– 用户58626


推荐阅读