C語言一直以來都是一種非常受歡迎的編程語言,其簡單易學、高效、靈活的特點使其被廣泛用于軟件和系統開發之中。在實際開發過程中,很多時候需要處理數據結構以及數據之間的傳遞,而JSON數據結構則是目前最受歡迎的一種結構化數據傳輸格式。本文將介紹如何在C語言中實現JSON數據結構。
#include#include #include #include //定義JSON數據類型 typedef enum { JSON_STRING, JSON_NUMBER, JSON_OBJECT, JSON_ARRAY, JSON_TRUE, JSON_FALSE, JSON_NULL } json_type; //定義JSON的數據結構 typedef struct { json_type type; union { char* string; //字符串類型 double number; //數字類型 struct json* object; //對象類型 struct json* array; //數組類型 bool boolean; //布爾類型 } value; } json; //JSON解析函數 void json_parse(json* j, const char** p) { switch (**p) { case 'n': //表示空 j->type = JSON_NULL; *p += 4; //指針后移 break; case 't': //表示真 j->type = JSON_TRUE; *p += 4; //指針后移 break; case 'f': //表示假 j->type = JSON_FALSE; *p += 5; //指針后移 break; case '\"': //表示字符串 j->type = JSON_STRING; p++; size_t len = strcspn(*p, "\""); char* str = (char*)malloc(len + 1); memcpy(str, *p, len); str[len] = '\0'; j->value.string = str; *p += len + 1; break; default: //表示數字 j->type = JSON_NUMBER; j->value.number = strtod(*p, (char**)p); break; } } int main(void) { char* json_string = "{ \"name\":\"Lucy\", \"age\":18, \"is_student\":true, \"score\":[78,99] }"; json j; const char* p = json_string; json_parse(&j, &p); printf("Name: %s\n", j.value.string); printf("Age: %.0f\n", j.value.number); printf("Is student: %d\n", j.value.boolean); printf("Score1: %.0f\n", j.value.array[0].value.number); printf("Score2: %.0f\n", j.value.array[1].value.number); return 0; }
以上是一個簡單的JSON解析程序,解析一個JSON字符串并將其存入JSON結構體中。其中,包含了JSON的幾種基本數據類型的解析方法,包括字符串、數字、布爾值和空值。通過使用C語言語法中的結構體和聯合體來構建JSON數據結構,既可以很好地描述JSON數據的內部結構,又能夠對數據進行靈活的管理和操作。