C語言如何判斷一個字符串是否為JSON格式?
#include <stdio.h>#include <stdbool.h>#include <ctype.h>#include <string.h>bool is_valid_json(const char *str) { int len = strlen(str); int left = 0; int right = len - 1; bool in_string = false; // 忽略左右兩邊的空格 while (isspace(str[left])) left++; while (isspace(str[right])) right--; // 判斷是否是對象或數組 if (str[left] == '{' && str[right] == '}' || str[left] == '[' && str[right] == ']') { // 遍歷字符串 for (int i = left + 1; i<= right - 1; i++) { if (str[i] == '"' && !in_string) { in_string = true; // 進入字符串 } else if (str[i] == '"' && in_string) { in_string = false; // 離開字符串 } else if (!in_string && (str[i] == ',' || str[i] == ':')) { // 逗號或冒號前必須有值 if (i == left + 1 || i == right - 1) { return false; } } } return true; // 如果遍歷完整個字符串沒有錯誤,說明是JSON格式 } return false; // 如果不是對象或數組,就不是JSON格式 } int main() { const char *json_str = "{ \"name\": \"Tom\", \"age\": 20 }"; if (is_valid_json(json_str)) { printf("是JSON格式\n"); } else { printf("不是JSON格式\n"); } return 0; }
以上代碼中,is_valid_json函數用于判斷字符串是否為JSON格式。
在遍歷字符串的過程中,需要考慮到字符串內部可能存在逗號和冒號,因此需要一個變量來記錄是否在字符串內部。
同時,還需要判斷字符串是否是對象或數組,對象以 { 開頭,} 結尾,數組以 [ 開頭,] 結尾,其他情況都不是JSON格式。
在遍歷過程中,如果發現逗號或冒號前沒有值,就說明不是JSON格式。
如果遍歷完整個字符串沒有錯誤,就說明是JSON格式。