车联网V2X-BSM消息JSON包解析

遇到一个需求,解析BSM消息的JSON包,网上下载cJSON.h和cJSON.h,然后解析BSM1.json文件。
BSM1.json文件内容如下:
{
	"ego_infor":[
		{
			"msgCnt":0,
			"id":15416284,
			"timeStamp":"1.615275863e+12",
			"latitude":31.00083665,
			"longitude":121.0002046,
			"elevation":"",
			"speed":0,
			"heading":90,
			"length":400,
			"width":180,
			"safeExt":{
				"aaa":1,
				"bb":1
			}
		},
		{
			"msgCnt":1,
			"id":15416284,
			"timeStamp":"1.615275863e+12",
			"latitude":31.00083665,
			"longitude":121.0002046,
			"elevation":"",
			"speed":0.0005859375,
			"heading":90,
			"length":400,
			"width":180,
			"safeExt":{
				"aaa":2,
				"bb":2
			}
		}
    ]
 }

解析代码如下:

#include <stdio.h>
#include "cJSON.h"
#include <stdlib.h>
    FILE            *fp = NULL;
    cJSON           *json;
    char            *out;
    char            *line = NULL;
    
int main() {

  fp = fopen("D:\\bsm1.json", "r");
  if(NULL == fp)
    {
        printf("load file fail!\n");
        return -1;
    }
  	fseek(fp,0L,SEEK_END); /* 定位到文件末尾 */
  	int length = ftell(fp);
  	printf("ftell:%d\n",length);
  	line = (char*)malloc(sizeof(char)*(length+1));
  	fseek(fp,0L,SEEK_SET); /* 定位到文件开头 */ 
  	fread(line,length,sizeof(char),fp);
  	//printf("line:%s\n",line);        
            json=cJSON_Parse(line); //获取整个大的句柄
    //        out=cJSON_Print(json);  //这个是可以输出的。为获取的整个json的值
            cJSON *arrayItem = cJSON_GetObjectItem(json,"ego_infor"); //获取这个对象成员
		    cJSON *object = cJSON_GetArrayItem(arrayItem,1);   //因为这个对象是个数组,获取第一个元素所以写下标为0


            cJSON *item = cJSON_GetObjectItem(object,"msgCnt");  
            printf("msgCnt:%d\n",item->valueint);

            item = cJSON_GetObjectItem(object,"id");
            printf("id:%ld\n",item->valueint);

            item = cJSON_GetObjectItem(object,"timeStamp");
            printf("timeStamp:%s\n",item->valuestring);
    cJSON_Delete(json);
    close(fp);
    free(line);
}

cJSON文件下载链接:下载链接

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
### 回答1: V2X(联网)是指辆与基础设施及其他辆之间进行信息交互和通信的技术。在V2X中,BSM(Basic Safety Message)消息是一种重要的通信消息,用于传输交通安全相关的基本信息。 BSM消息封装格式主要括如下内容: 1. 消息头:消息的标识符和长度信息,用于标识消息的类型和大小。 2. 消息体:含了辆的基本安全信息,如辆的位置、速度、方向、加速度等。还可能括其他的辆状态信息、驾驶员行为信息等。 3. 时间戳:记录消息的发送时间,用于协调不同辆之间的数据同步。 4. 消息签名:对消息进行数字签名,验证消息的完整性和真实性,防止消息被篡改。 5. 消息优先级:定义消息的优先级,用于区分不同类型的消息,保证重要信息的及时传输。 BSM消息封装格式应该符合标准的通信协议,如IEEE 1609.2和SAE J2735等。这些协议定义了BSM消息的具体格式和字段的含义,以保证不同辆和基础设施之间的信息交互的一致性和互操作性。 总之,BSM消息封装格式是用来传输V2X中的基本安全信息的一种格式化方式,它标准化了消息的结构和内容,以确保有效的交通安全信息传输和辆间的协调。 ### 回答2: V2X BSM(基础安全消息)是在智能交通系统中用于辆之间传递信息的一种标准化格式。BSM消息封装格式的设计旨在提供一种可靠、高效的通信机制,以便辆可以传输和接收关键的安全信息。 BSM消息封装格式通常由两个部分组成:消息头和消息体。 消息含了一些元数据信息,例如消息类型、发送时间、消息的大小等。这些信息可以帮助接收方正确解析和处理消息消息体则含了实际的数据内容。其中最重要的是辆的状态信息,例如辆的位置、速度、加速度等。此外,还可以含其他相关信息,如辆的类型、标识符、行驶方向等。这些信息对于辆之间的协同和决策非常重要,可以帮助辆预测和避免可能的危险情况。 在封装格式的设计中,通常还考虑到了一些安全性和效率的要求。例如,引入了数据压缩和加密等机制来减少通信的带宽和保护信息安全。此外,还可以使用适当的错误检测和纠正机制,确保消息的可靠性和准确性。 总的来说,V2X BSM消息封装格式旨在提供一种可靠、高效的通信方式,使辆能够准确传递和接收关键的安全信息。这种封装格式的设计充分考虑了安全性、实时性和网络效率等方面的要求,使得辆之间能够实现有效的协同和决策,提高整个智能交通系统的安全性和效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值