android接收发送数据格式,单片机收发Json数据格式与安卓手机双向通信实例附简要代码...

原标题:单片机收发Json数据格式与安卓手机双向通信实例附简要代码

1.简介

JSON(Java Object Notation) 是一种轻量级的数据交换格式。JSON采用完全独立于语言的文本格式,这些特性使JSON成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成。

因为现在服务器平台数据传输采用JSON协议,因此,硬件堆JSON的解析非常重要。传统的C JSON解析非常庞大,在微处理器中,这无疑是一个巨大的问题。因此,需要编写尽量简单的代码,灵思致远整理。

2.安卓端的代码编写:

2.1安卓生成json数据格式简要代码:

比如生成:

{

"name" : "jack",

"age" : 22

}

JSONObject tt= new JSONObject();//new一个JSONObject对象,命名为wangxiaoer

Object nullObj = null; //解决put中因二义性引起的编译错误

try{

tt.put("name","jack");

tt.put("age",22);

}catch(JSONException e){

e.printStackTrace();

}

2.2安卓解析json数据格式简要代码:

在安卓手机编写相关的代码,利用安卓蓝牙API编写代码,新建一个接受线程去接收蓝牙收到的数据,把接收到的数据用JSON数据的API进行解析,简要代码如下:

try {

JSONObject obj = new JSONObject(recStr);

info = Integer.parseInt(obj.getString("RR"), 16);

} catch (JSONException e) {

e.printStackTrace();

}

这样就可以在安卓手机APP上获取索要的数据,接下来就可以进行相关的数据处理。

3.单片机端的代码编写:

3.1 单片机生成json数据格式简要代码:

单片机采用51系列单片机用C51语言编写,通过sprintf构造JSON格式文件通过蓝牙串口模块发送到安卓手机,简要代码如下:

sprintf(msg,"{\"RR\":\"%02x\"}\0",(unsigned int )RRtemp);

Serial_print(msg);

这里涉及到Serial_print()函数如下:

void Serial_print(char *msg)

{

while (*msg != '\0') {

S2BUF = *msg;

while ((S2CON & S2TI) == 0);

S2CON &= ~S2TI;

msg++;

}

}

3.2单片机解析json数据格式简要代码:

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 键值对比函数

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

}

}

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

}

}

char json_check_value(char *str1, char *str2)

{

if(strcmp(str1,str2) == 0)

{

return 1; //匹配成功返回1

}

else

{

return 0;

}

责任编辑:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值