Files
License_plate_recognition/json_parser.c
2025-10-18 16:05:39 +08:00

72 lines
2.0 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "json_parser.h"
#include "chinese_char_map.h"
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
// 简单的JSON解析函数解析格式: {"cmd":1,"text":"hello"}
int ParseJsonCommand(const char* json_str, JsonCommand* command) {
if (!json_str || !command) {
return -1;
}
// 初始化结构体
command->cmd = 0;
memset(command->text, 0, MAX_TEXT_LENGTH);
// 查找cmd字段
const char* cmd_pos = strstr(json_str, "\"cmd\":");
if (cmd_pos) {
cmd_pos += 6; // 跳过"cmd":
// 跳过空格
while (*cmd_pos == ' ') cmd_pos++;
command->cmd = atoi(cmd_pos);
}
// 查找text字段
const char* text_pos = strstr(json_str, "\"text\":");
if (text_pos) {
text_pos += 7; // 跳过"text":
// 跳过空格和引号
while (*text_pos == ' ' || *text_pos == '\"') text_pos++;
// 复制文本直到遇到引号或字符串结束
int i = 0;
while (*text_pos && *text_pos != '\"' && i < MAX_TEXT_LENGTH - 1) {
command->text[i++] = *text_pos++;
}
command->text[i] = '\0';
}
return 0;
}
// 创建IP地址消息格式: {"type":"ip","address":"192.168.1.100"}
int CreateIpMessage(char* buffer, int buffer_size, const char* ip_address) {
if (!buffer || !ip_address || buffer_size < 50) {
return -1;
}
int len = snprintf(buffer, buffer_size,
"{\"type\":\"ip\",\"address\": \"%s\"}",
ip_address);
return (len > 0 && len < buffer_size) ? 0 : -1;
}
// 查找中文字符在fonts3数组中的索引
int FindChineseCharIndex(const char* utf8_char) {
if (!utf8_char) {
return -1;
}
// 遍历映射表查找匹配的字符
for (int i = 0; i < CHINESE_CHAR_MAP_SIZE; i++) {
if (strcmp(utf8_char, chinese_char_map[i].utf8_char) == 0) {
return chinese_char_map[i].font_index;
}
}
// 未找到匹配的字符
return -1;
}