JSON
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,常用于将数据从服务器传输到Web应用程序。它基于JavaScript语法,但可以被多种编程语言解析和生成。
JSON使用键值对的方式来表示数据,其中键是字符串,值可以是字符串、数字、布尔值、数组、对象或null。它的语法简洁明了,易于阅读和编写,并且广泛应用于Web开发、API设计和数据交互等领域。
以下是JSON的一个示例:
{
"name": "icheima",
"age": 30,
"city": "Shenzhen"
}
在许多编程语言中,可以使用内置的函数或库来解析JSON字符串并将其转换为相应的数据结构,以便进行操作和处理。
cJSON
cJSON是一个使用C语言编写的JSON数据解析器,具有超轻便,可移植,单文件的特点,使用MIT开源协议。
cJSON项目托管在Github上,仓库地址如下:
https://github.com/DaveGamble/cJSON
学习使用它非常的简单, 下面我们以一个简单的例子演示
发送数据:
char payload[256] = "{\"id\":\"161848123\",\"version\":\"1.0\",\"params\":{\"PowerSwitch\":%d,\"CurrentTemperature\":%f},\"method\":\"thing.event.property.post\"}";
char sendbuf[256];
sprintf(sendbuf,payload,1,66.6);
bsp_usart_dma_send_string((uint8_t *)sendbuf);
接收数据处理:
/**
{"method":"thing.service.property.set","id":"1579746008","params":{"PowerSwitch":1},"version":"1.0.0"}
*/
cJSON *json = cJSON_Parse(data);
if (json) {
cJSON *method = cJSON_GetObjectItem(json, "method");
cJSON *id = cJSON_GetObjectItem(json, "id");
cJSON *params = cJSON_GetObjectItem(json, "params");
cJSON *version = cJSON_GetObjectItem(json, "version");
cJSON *icheima_mqtt_connect = cJSON_GetObjectItem(json, "icheima_mqtt_connect");
if (method && id && params && version) {
printf("Method: %s\n", method->valuestring);
printf("ID: %s\n", id->valuestring);
cJSON *powerSwitch = cJSON_GetObjectItem(params, "PowerSwitch");
if (powerSwitch && cJSON_IsNumber(powerSwitch)) {
printf("PowerSwitch: %d\n", powerSwitch->valueint);
}
cJSON *currentTemperature = cJSON_GetObjectItem(params, "CurrentTemperature");
if (currentTemperature && cJSON_IsNumber(currentTemperature)) {
printf("currentTemperature: %f\n", currentTemperature->valuedouble);
}
printf("Version: %s\n", version->valuestring);
}
cJSON_Delete(json);
} else {
printf("JSON parsing failed.\n");
}
python接收数据
import serial
import time
import json
# 打开串口
ser = serial.Serial("COM23",baudrate=115200)
data=None
while True:
n = ser.in_waiting
if n > 0:
temp = ser.read(ser.in_waiting)
if data:
data = data + temp
else:
data = temp
d = data.decode()
try:
js = json.loads(d)
print(f"type={type(d)},data={d}")
print(js["params"]['CurrentTemperature'])
except Exception as e:
pass
else:
# print(n)
data=None
pass
time.sleep(0.1)