在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表示格式有誤。
上一篇python 求方程公式
下一篇python 類的依賴