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 serialimport timeimport json# 打开串口ser = serial.Serial("COM23",baudrate=115200)data=Nonewhile True:n = ser.in_waitingif n > 0:temp = ser.read(ser.in_waiting)if data:data = data + tempelse:data = tempd = data.decode()try:js = json.loads(d)print(f"type={type(d)},data={d}")print(js["params"]['CurrentTemperature'])except Exception as e:passelse:# print(n)data=Nonepasstime.sleep(0.1)
