将数组或结构体的数据转换为 JSON 格式的程序可以通过使用 JSON 库来实现。下面以 C/C++ 语言为例讲解如何使用 JSON 库来将数据转换为 JSON 格式的字符串。
- 下载并安装 JSON 库
我们可以使用开源的 JSON 库,如 cJSON、jansson、rapidjson 等。这里以 cJSON 为例:
- 首先从 cJSON 的官方网站(https://github.com/DaveGamble/cJSON)下载 cJSON 库的源代码。
- 下载后,将 cJSON.c 和 cJSON.h 这两个文件添加到您的工程中。
- 定义数组或结构体
首先,您需要定义表示数据的数组或结构体,如下所示:
/* 定义数组 */
int arr[5] = {1, 2, 3, 4, 5};
/* 定义结构体 */
typedef struct {
int x;
int y;
} Point;
Point points[3] = {{0, 0}, {1, 2}, {2, 4}};
- 将数据转换为 JSON 格式的字符串
使用 cJSON 库将数组或结构体的数据转换为 JSON 格式的字符串,如下所示:
/* 将数组转换为 JSON 字符串 */
cJSON *jsonArr = cJSON_CreateIntArray(arr, 5);
char *jsonArrStr = cJSON_Print(jsonArr);
printf("%s", jsonArrStr);
cJSON_Delete(jsonArr);
free(jsonArrStr);
/* 将结构体数组转换为 JSON 字符串 */
cJSON *jsonPoints = cJSON_CreateArray();
for (int i = 0; i < 3; i++) {
cJSON *jsonPoint = cJSON_CreateObject();
cJSON_AddNumberToObject(jsonPoint, "x", points[i].x);
cJSON_AddNumberToObject(jsonPoint, "y", points[i].y);
cJSON_AddItemToArray(jsonPoints, jsonPoint);
}
char *jsonPointsStr = cJSON_Print(jsonPoints);
printf("%s", jsonPointsStr);
cJSON_Delete(jsonPoints);
free(jsonPointsStr);
这段代码会将数组和结构体数组分别转换为 JSON 格式的字符串,并输出到终端上。
- 通过串口发送 JSON 格式的字符串
最后,您可以将 JSON 格式的字符串通过串口发送给另一个设备。在 STM32 上使用串口通信需要使用 HAL 库,例如下面的代码可以通过串口 1 发送 JSON 格式的字符串:
#include "stm32f4xx_hal.h"
#include <stdio.h>
/* 打开串口设备 */
UART_HandleTypeDef huart1;
void MX_USART1_UART_Init(void) {
huart1.Instance = USART1;
huart1.Init.BaudRate = 115200;
huart1.Init.WordLength = UART_WORDLENGTH_8B;
huart1.Init.StopBits = UART_STOPBITS_1;
huart1.Init.Parity = UART_PARITY_NONE;
huart1.Init.Mode = UART_MODE_TX;
huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
huart1.Init.OverSampling = UART_OVERSAMPLING_16;
HAL_UART_Init(&huart1);
}
int main() {
...
/* 发送 JSON 格式的字符串 */
HAL_UART_Transmit(&huart1, (uint8_t *)jsonArrStr, strlen(jsonArrStr), 1000);
...
}