适用于单片机最小JSON解析

硬件设备由 MCUMCU 上的 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

       }

}

转载于:https://my.oschina.net/viror/blog/678068

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值