C語言中可以通過正則表達式來解析JSON格式的數(shù)據(jù)。JSON是一種輕量級的數(shù)據(jù)交換格式,經常被用于前后端數(shù)據(jù)交互。下面我們就來看看如何利用C語言中的正則表達式來解析JSON數(shù)據(jù)。
#include <stdio.h> #include <regex.h> /* JSON數(shù)據(jù) */ char* json = "{ \"name\": \"John\", \"age\": 24, \"city\": \"New York\" }"; int main() { /* 定義正則表達式 */ regex_t regex; regmatch_t matches[10]; char *pattern = "\"([^\"]+)\"[[:space:]]*:[[:space:]]*([^,}]+)"; /* 編譯正則表達式 */ int ret = regcomp(®ex, pattern, REG_EXTENDED); if (ret != 0) { printf("Error compiling regex\n"); return 1; } /* 匹配正則表達式 */ int submatch = 0; while (regexec(®ex, json, 10, matches, 0) == 0) { submatch++; /* 打印匹配到的鍵值對 */ for (int i=0; i<submatch*2; i+=2) { char buf[100]; int len = matches[i+1].rm_eo - matches[i+1].rm_so; strncpy(buf, json+matches[i+1].rm_so, len); buf[len] = '\0'; printf("%.*s: %.*s\n", matches[i].rm_eo-matches[i].rm_so, json+matches[i].rm_so, len, buf); } /* 截取JSON字符串 */ json += matches[submatch*2-1].rm_eo; } /* 釋放資源 */ regfree(®ex); return 0; }
以上是一個簡單的正則表達式解析JSON的例子。代碼分為三個部分:
- 定義正則表達式,這里采用了一個模式字符串,用于匹配JSON格式中的鍵值對。
- 編譯正則表達式,如果編譯失敗則會輸出錯誤信息。
- 匹配JSON字符串,然后將每個鍵值對打印出來,同時截取JSON字符串。匹配結束后需要釋放正則表達式的資源。