硬件设备由 MCU、MCU 上的 OS、各种传感器、WIFI/蓝牙/3G/4G 以及其他联网通信模块和应用程序构成。 其中硬件设备有两种接入方式, 第一种就是通过联网通信模块接入网关, 通过网关完成数据的发送与接收, 最终将数据转发到云平台或者手机端。 第二种就是硬件设备直接与手机实现本地连接, 进行数据的交换包括配网等操作。 因为云端平台数据传输采用JSON协议,因此,硬件堆JSON的解析非常重要。传统的C JSON解析非常庞大,在微处理器中,这无疑是一个巨大的问题。因此,编写了一个非常简单的JSON你判定,解析,与键值校验的三个纯C语言函数。占用空间非常小。具体的代码如下文所示:
硬件设备由 MCU、MCU 上的 OS、各种传感器、WIFI/蓝牙/3G/4G 以及其他联网通信模块和应用程序构成。 其中硬件设备有两种接入方式, 第一种就是通过联网通信模块接入网关, 通过网关完成数据的发送与接收, 最终将数据转发到云平台或者手机端。 第二种就是硬件设备直接与手机实现本地连接, 进行数据的交换包括配网等操作。
因为云端平台数据传输采用JSON协议,因此,硬件堆JSON的解析非常重要。传统的C JSON解析非常庞大,在微处理器中,这无疑是一个巨大的问题。因此,编写了一个非常简单的JSON你判定,解析,与键值校验的三个纯C语言函数。占用空间非常小。具体的代码如下文所示:
/***************************************
name: JSON C函数库 C文件
***************************************/
#include "include.h"
/***************************************
name: 函数声明
input:
output:
description:
***************************************/
char json_check(char *str); //JSON 校验函数
char json_get_value(char *json,char *json_key , char *json_value); //JSON获取键值
char json_check_value(char *str1, char *str2); //JSON 键值对比函数
/***************************************
name: JSON 校验函数
input: 字符串
output: 合法JAON 返回1 不合法JSON 返回0
description:
***************************************/
char json_check(char *str)
{
char str_length; //定义字符长度变量
str_length = strlen(str); //计算字符长度
if(str[0] == '{' && str[str_length-1] == '}') //通过首尾大括号判断是否为JSON
{
return 1; //如果字符串为合法JSON 返回1
}
else
{
return 0; //如果字符串为合法JSON 返回0
}
}
/***************************************
name: JSON 获取键值函数
input: JSON字符串 要获取的键名 获取键值的字符串
output: 如果获取成功返回1 获取失败返回0
description:
***************************************/
char json_get_value(char *json,char *json_key , char *json_value)
{
char *json_key_start; //定义键名开始的位置
char *json_key_end; //定义键名结束的位置
char json_key_length; //定义键名长度
char *json_value_start; //定义键值开始的位置
char *json_value_end; //定义键值结束的位置
char json_value_length; //定义键值长度
json_key_start = strstr(json,json_key); //获取键名开始的位置
json_key_length = strlen(json_key); //获取键名的长度
json_key_end = json_key_start + json_key_length; //获取键名结束的位置
if(json_key_start != 0 && *(json_key_start - 1) == '\"' && *(json_key_end) == '\"' && *(json_key_end + 1) == ':' && *(json_key_end + 2) == '\"' )
{
json_value_start = json_key_end + 3; //获取键值开始的位置
json_value_end = strstr(json_value_start,"\""); //获取键值结束的位置
json_value_length = json_value_end - json_value_start; //获取键值的长度
strncpy(json_value,json_value_start,json_value_length); //将键值存入指针数组
json_value[json_value_length] = '\0'; //指针最后一位补字符串结束符 \0
return 1; //成功获取键值 返回1
}
else
{
json_value[0] = '\0';
return 0; //失败获取键值 返回0
}
}
/***************************************
name: JSON 键值对比函数
input: JSON 键值 要匹配的字符
output: 如果匹配成功返回1 失败返回0
description:
***************************************/
char json_check_value(char *str1, char *str2)
{
if(strcmp(str1,str2) == 0)
{
return 1; //匹配成功返回1
}
else
{
return 0;
//匹配成功返回0
}
}
© 著作权归作者所有
作者:VIROR
文章来源:开源中国社区