在使用 C 語言進行 JSON 解析時,我們經常需要手動拼接字符串進行解析。下面就讓我們一起來看看,如何使用 C 語言手動拼接字符串進行 JSON 解析。
#include <stdio.h> #include <stdlib.h> #include <string.h> // 定義 JSON 結構體 typedef struct { char *name; char *value; } json_pair; // 解析 JSON 字符串 json_pair *parse_json(char *json_string) { int len = strlen(json_string); int i = 0; int j = 0; int k = 0; json_pair *json_data = malloc(sizeof(json_pair) * len); for (i = 0; i< len; i++) { if (json_string[i] == '"') { char *name = malloc(sizeof(char) * len); char *value = malloc(sizeof(char) * len); i++; for (j = i; json_string[j] != '"'; j++) { name[j-i] = json_string[j]; } name[j-i] = '\0'; i = j+1; for (j = i+1, k = 0; json_string[j] != '"'; j++, k++) { value[k] = json_string[j]; } value[k] = '\0'; json_pair *pair = malloc(sizeof(json_pair)); pair->name = name; pair->value = value; memcpy(&json_data[i/2], pair, sizeof(json_pair)); } } return json_data; } int main() { char *json_str = "{ \"name\": \"Tom\", \"age\": \"18\", \"city\": \"Beijing\" }"; json_pair *json_data = parse_json(json_str); // 輸出解析結果 for (int i = 0; i< 3; i++) { printf("%s: %s\n", json_data[i].name, json_data[i].value); } return 0; }
從代碼中可以看出,我們首先定義了一個名為“json_pair”的結構體,用于存儲 JSON 中的每一組 key-value 值。在解析 JSON 時,通過循環遍歷字符串,判斷每個字符串的字符類型,再將其處理成 JSON 對象。
在解析過程中,我們使用了 malloc 函數動態申請內存,以免出現內存溢出的問題。此外,利用 memcpy 函數將解析結果復制到 JSON 結構體數組中。
最后,我們通過循環輸出解析結果,將解析出的 key-value 值打印出來。