欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

c 字符串判斷是否為json格式

老白1年前8瀏覽0評論

在C語言中,判斷一個字符串是否為JSON格式的方法比較簡單,可以通過以下步驟進行操作:

int is_json(const char* str) 
{
int len = strlen(str); //獲取字符串長度
if (str[0] != '{' || str[len-1] != '}') //判斷字符串是否以大括號開頭和結(jié)尾
return 0;
int i = 1;
int cnt = 0; //記錄大括號的數(shù)量
while (i< len-1) 
{
if (str[i] == '{')
cnt++;
else if (str[i] == '}')
cnt--;
else if (str[i] == ':' && cnt == 1) //鍵值對出現(xiàn)之后,大括號的數(shù)量只能為1
{
i++;
if (str[i] == '[') //如果值為數(shù)組,則檢查數(shù)組格式
{
int j = i+1;
int comma = 0; //記錄逗號的數(shù)量
while (j< len-1) 
{
if (str[j] == ',')
comma++;
j++;
}
if (comma == 0 || str[j-1] != ']') //如果逗號的數(shù)量為0或者數(shù)組結(jié)尾不是中括號,則認為不是JSON格式
return 0;
}
else if (str[i] == '{') //如果值為對象,則遞歸判斷對象格式
{
int j = i;
int cnt2 = 1; //記錄對象內(nèi)部大括號的數(shù)量
while (j< len-1) 
{
j++;
if (str[j] == '{')
cnt2++;
else if (str[j] == '}')
{
cnt2--;
if (cnt2 == 0) //當對象內(nèi)部大括號數(shù)量為0時,結(jié)束遞歸
break;
}
}
if (j == len-1) //如果遞歸結(jié)束時j指向字符串結(jié)尾,則表示格式有誤
return 0;
}
}
i++;
}
return 1;
}

該方法的原理是先判斷字符串是否以大括號開頭和結(jié)尾,然后對大括號數(shù)量進行統(tǒng)計。當遇到鍵值對時,需要判斷值的類型是數(shù)組還是對象。如果是數(shù)組,則需要檢查數(shù)組格式是否正確,如果是對象則需要遞歸地進行判斷。最后,返回1表示正常的JSON格式,返回0表示格式有誤。