使用C json轉對象時,有時會遇到對象為空的情況。
#include#include #include #include "cjson/cJSON.h" int main() { char *json_str = "{}"; cJSON *root = cJSON_Parse(json_str); if (!root) { const char *error_ptr = cJSON_GetErrorPtr(); if (error_ptr != NULL) { fprintf(stderr, "Error before: %s\n", error_ptr); } } cJSON_Delete(root); return 0; }
可以看到,這個JSON字符串里只有一對空大括號,表示一個空的對象。然而,使用cJSON_Parse將其轉換為cJSON對象時,root的值卻為NULL。
這是因為使用cJSON_Parse解析空對象時,cJSON內部會將root設為NULL。因此,必須在使用root之前對其進行非NULL判斷,避免出現程序崩潰的情況。
if (!root) { const char *error_ptr = cJSON_GetErrorPtr(); if (error_ptr != NULL) { fprintf(stderr, "Error before: %s\n", error_ptr); } }
在這段代碼中,我們通過判斷root是否為NULL來處理空對象的情況,在cJSON_GetErrorPtr()方法中獲取錯誤信息。需要注意的是,即使是空對象,也可以使用cJSON_Delete()方法進行釋放。
cJSON_Delete(root);
因此,在使用cJSON_Parse解析JSON字符串時,需要注意空對象的情況,避免出現意外情況。
下一篇vue如何去除聲音