在C語言中使用JSON需要依賴一些第三方的庫,比如常用的CJSON庫。CJSON支持將C語言的結構體與JSON數據進行互轉,實現了C語言與JSON數據類型的對接。
賦值JSON數據到C語言結構體,需要使用CJSON庫中的api函數cJSON_Parse(),該函數將JSON數據轉化為一個cJSON類型的指針,從而可以對cJSON類型進行操作。
cJSON *root = cJSON_Parse(json_str);
其中json_str是一個JSON數據字符串,需要被解析的JSON數據。我們可以通過訪問cJSON類型指針中的元素來獲取JSON中對應的值。
比如我們要獲取一個名為"name"的字符串類型的值,可以使用下面的方式:
cJSON *name = cJSON_GetObjectItem(root, "name"); if (name != NULL) { printf("name value: %s\n", name->valuestring); } else { printf("get name failed!\n"); }
其中root是一個cJSON類型的指針,"name"是要獲取的屬性名,valuestring表示獲取的值為一個字符串類型的值。
賦值C語言結構體到JSON數據,需要使用CJSON庫中的api函數cJSON_CreateObject()和cJSON_AddItemToObject()。這些函數會將C語言結構體轉化為JSON數據類型。
Person person = { "Tom", "female", 20 }; cJSON *root = cJSON_CreateObject(); cJSON_AddStringToObject(root, "name", person.name); cJSON_AddStringToObject(root, "gender", person.gender); cJSON_AddNumberToObject(root, "age", person.age); char *json_str = cJSON_Print(root);
其中Person類型是一個C語言的結構體類型,包含3個字段,分別為name、gender、age。上述示例代碼將person結構體中的成員變量按照JSON數據所需的格式添加到cJSON類型的指針對象root中,最后通過cJSON_Print()函數將cJSON類型的指針對象轉化為JSON數據字符串。
CJSON庫可以方便地將C語言的結構體與JSON數據進行互轉,能夠極大地提升C語言與其他語言、數據格式的互通性。