色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

cjson如何判斷json格式為json

張吉惟2年前8瀏覽0評論

cjson是一個用來解析JSON格式數據的C/C++語言庫,它可以將JSON格式的數據轉換成C/C++的數據類型,同時也可以將C/C++的數據類型轉換成JSON格式的數據。對于cjson,要想判斷JSON格式是否正確,我們需要使用一些API。

cJSON *cJSON_Parse(const char *json)

cJSON_Parse()函數是用來解析JSON格式數據的,它會返回一個cJSON對象,如果JSON格式不正確,它會返回NULL。

cJSON_bool cJSON_IsNumber(const cJSON *const object)
cJSON_bool cJSON_IsString(const cJSON *const object)
cJSON_bool cJSON_IsArray(const cJSON *const object)
cJSON_bool cJSON_IsObject(const cJSON *const object)

這里介紹四個重要的函數,它們分別是cJSON_IsNumber()、cJSON_IsString()、cJSON_IsArray()和cJSON_IsObject()。它們的作用是判斷輸入的cJSON對象是否為數字、字符串、數組或對象。如果是,返回1;否則返回0。

int cJSON_GetArraySize(const cJSON *array)

該函數返回一個數組或者對象中元素的數量。如果不是數組或者對象,返回0。

cJSON *cJSON_GetArrayItem(const cJSON *array, int item)

cJSON_GetArrayItem()函數返回數組或者對象的第item個元素,如果不是數組或對象,或item越界,返回NULL。

結合使用這些API,我們可以編寫一段用于判斷JSON格式的代碼:

cJSON *root = cJSON_Parse(json_str);//解析json
if(NULL == root)
{
printf("json parse fail:%s\n", cJSON_GetErrorPtr());
return -1;
}
if(!cJSON_IsObject(root))
{
printf("json format error: root is not a json object\n");
cJSON_Delete(root);//釋放內存
return -1;
}
cJSON *array = cJSON_GetObjectItem(root, "array");//獲取數組元素
if(NULL == array)
{
printf("json format error: no array element\n");
cJSON_Delete(root);//釋放內存
return -1;
}
if(!cJSON_IsArray(array) || cJSON_GetArraySize(array)< 1)//判斷是否是數組&元素數量是否為0
{
printf("json format error: array element is not an array or is empty\n");
cJSON_Delete(root);//釋放內存
return -1;
}
cJSON *item1 = cJSON_GetArrayItem(array, 0);//獲取第一個元素
if(NULL == item1)
{
printf("json format error: no array items\n");
cJSON_Delete(root);//釋放內存
return -1;
}
if(!cJSON_IsObject(item1))//判斷是否為對象
{
printf("json format error: array items is not a json object\n");
cJSON_Delete(root);//釋放內存
return -1;
}
//其他判斷
cJSON_Delete(root);//釋放內存

以上代碼可以判斷JSON格式,包括是否為空、是否為對象、是否包含數組、數組是否為空,第一個元素是否為對象等等。這樣可以有效避免程序因解析格式錯誤而出現異常情況。