JSON(JavaScript 對象表示法)是一種輕量級的數據交換格式。它易于人閱讀和編寫,同時也易于機器理解和生成。在很多應用中,需要從收到的 JSON 字符串中解析出數據并進行處理。在 C 語言中解析 JSON 串的方式有很多,下面介紹其中一種實現。
在 C 語言中,需要使用第三方庫來解析 JSON 串。其中,比較流行的庫包括 cJSON、jansson 等。此處以 cJSON 為例進行介紹。cJSON 是一個開源的 C 語言庫,用于解析和生成 JSON 數據。它是一個單文件庫,不依賴其他庫,并且跨平臺。
使用 cJSON 庫解析 JSON 串的基本思路是:將 JSON 字符串解析為 cJSON 對象,再從 cJSON 對象中獲取需要的數據。以下是解析 JSON 串的代碼示例:
/* 解析 JSON 串 */ cJSON *root = cJSON_Parse(json_str); if (root == NULL) { /* 解析出錯 */ printf("Error before: [%s]\n", cJSON_GetErrorPtr()); return; } /* 獲取 JSON 對象中的數據 */ cJSON *name = cJSON_GetObjectItem(root, "name"); cJSON *age = cJSON_GetObjectItem(root, "age"); cJSON *address = cJSON_GetObjectItem(root, "address"); /* 獲取字符串類型的數據 */ char *name_str = cJSON_GetStringValue(name); char *address_str = cJSON_GetStringValue(address); /* 獲取數值類型的數據 */ int age_num = age->valueint; /* 釋放 cJSON 對象 */ cJSON_Delete(root);
在上述代碼中,cJSON_Parse 函數用于將 JSON 字符串解析為 cJSON 對象。如果解析失敗,則返回 NULL。cJSON_GetObjectItem 函數用于獲取 cJSON 對象中指定鍵名的值。獲取到的值是一個 cJSON 對象,可以根據具體情況使用 cJSON_GetStringValue 或 cJSON_GetNumberValue 來獲取字符串或數值類型的數據。最后,使用 cJSON_Delete 函數釋放 cJSON 對象。
總結來看,使用 cJSON 庫可以非常方便地解析 JSON 串,并獲取其中需要的數據。