C語(yǔ)言中定義JSON數(shù)據(jù)的方法有很多種,我們可以使用第三方庫(kù),也可以手動(dòng)解析字符串。下面是手動(dòng)解析字符串的方法:
#include <string.h> #include <stdio.h> void parse_json(char *json_str) { char *token; char delim[] = "{}\",:"; token = strtok(json_str, delim); while (token != NULL) { printf("%s\n", token); token = strtok(NULL, delim); } } int main() { char json_str[] = "{\"name\":\"John\",\"age\":30,\"city\":\"New York\"}"; parse_json(json_str); return 0; }
以上代碼將JSON字符串以花括號(hào)、雙引號(hào)、逗號(hào)和冒號(hào)等符號(hào)為界,將字符串分割成多個(gè)子字符串,并輸出到控制臺(tái)。
定義JSON數(shù)據(jù)需要先了解JSON的基本語(yǔ)法。JSON是一種輕量級(jí)的數(shù)據(jù)交換格式,使用鍵值對(duì)的方式來(lái)保存數(shù)據(jù),比如:
{ "name": "John", "age": 30, "city": "New York" }
在C語(yǔ)言中,我們可以使用結(jié)構(gòu)體來(lái)定義JSON數(shù)據(jù):
typedef struct { char name[20]; int age; char city[20]; } Person; int main() { Person person; strcpy(person.name, "John"); person.age = 30; strcpy(person.city, "New York"); //把結(jié)構(gòu)體轉(zhuǎn)為JSON字符串 char json_str[100]; sprintf(json_str, "{\"name\":\"%s\",\"age\":%d,\"city\":\"%s\"}", person.name, person.age, person.city); printf("%s\n", json_str); //把JSON字符串轉(zhuǎn)為結(jié)構(gòu)體 sscanf(json_str, "{\"name\":\"%[^\"]\",\"age\":%d,\"city\":\"%[^\"]\"}", person.name, &person.age, person.city); printf("%s, %d, %s\n", person.name, person.age, person.city); return 0; }
以上代碼使用結(jié)構(gòu)體保存數(shù)據(jù),并演示了如何在結(jié)構(gòu)體和JSON字符串之間相互轉(zhuǎn)換。