Parsing 解析cbor流

Parsing 解析cbor流,parsing,containers,decoding,cbor,Parsing,Containers,Decoding,Cbor,我正在尝试使用tinyCBOR解析CBOR流。目标是为“映射类型”(因为我不知道cbor流中有多少键以及它们是什么)编写一个通用解析代码,但不是为json编写,我只想使用“键””获取值,但要从键获取值,我必须知道键。 我只需在函数中传递“键””即可解析该值 cbor_value_map_find_value(&main_value,"Age",&map_value); 但有几件事我还不清楚 从CBOR流中获取键和值的顺序是什么 下面是我的地图格式数据- {"Roll_numbe

我正在尝试使用tinyCBOR解析CBOR流。目标是为“映射类型”(因为我不知道cbor流中有多少键以及它们是什么)编写一个通用解析代码,但不是为json编写,我只想使用“键””获取值,但要从键获取值,我必须知道键。 我只需在函数中传递“键””即可解析该值

cbor_value_map_find_value(&main_value,"Age",&map_value);
但有几件事我还不清楚

从CBOR流中获取键和值的顺序是什么

下面是我的地图格式数据-

{"Roll_number": 7, "Age": 24, "Name": "USER"}
这是来自cbor.me链接的二进制格式-

   A3                        # map(3)
   6B                        # text(11)
   526F6C6C5F6E756D626572    # "Roll_number"
   07                        # unsigned(7)
   63                        # text(3)
   416765                    # "Age"
   18 18                     # unsigned(24)
   64                        # text(4)
   4E616D65                  # "Name"
   64                        # text(4)
   55534552                  # "USER"
1.如何从流中获取密钥。喜欢-从流中滚动\u编号或年龄?(按顺序获取键和值也可以)

2.获得Roll_数值后,如何跳到下一个元素(“年龄”)获取“”和“

3.如何确定我是在“流结束时到达的,现在没有数据

任何代码片段,包括如何解析以及需要遵循的函数序列

任何帮助都将不胜感激。 谢谢

对于理解API非常有帮助。要迭代映射的键和值,可以调用,然后直到返回true(只要不存在要查看的嵌套映射或数组)。例如:

cbor\u parser\u init(输入,sizeof(输入),0,&parser,&it);
如果(!cbor_value_是映射(&it)){
返回1;
}
err=cbor\u value\u输入\u容器(&it,&map);
if(err)返回1;
while(!cbor_value_在_端(&map)){
//拿到钥匙。记住,钥匙不一定是字符串。
如果(!cbor_value_是_text_string(&map)){
返回1;
}
char*buf;
尺寸;
//注意:这也将前进到值
err=cbor\u value\u dup\u text\u字符串(&map,&buf,&n,&map);
if(err)返回1;
printf(“键:'%s'\n',(int)n-1,buf);
如果(strncmp(buf,“年龄”,n-1)=0){
if(cbor_值_为_整数(&map)){
//找到了所需的键和值类型
err=cbor\u value\u get\u int(&map,&val);
if(err)返回1;
printf(“年龄:%d\n”,val);
}
//注意:这里不能休息,如果你想的话,必须坚持到最后
//“它”仍然有效。
}
免费(buf);
err=cbor\U值\U前进(&map);
if(err)返回1;
}
err=cbor\u value\u leave\u容器(&it,&map);
if(err)返回1;