c++ JsonCpp Parse對Json字符串解析轉換判斷的補充 Json格式驗證

最近在使用JsonCpp的時候,須要判斷當前字符串是否爲正確的Json格式,可是Jsoncpp對字符串進行認爲是正確的json數據,致使獲取的時候出錯json

添加一個驗證的方法,在轉換以前,提早驗證數據是否正確,正確以後才能進行轉換數組

 1 bool IsJsonIllegal(const char *jsoncontent)  2 {  3     std::stack<char> jsonstr;  4     const char *p = jsoncontent;  5     char startChar = jsoncontent[0];  6     char endChar = '\0';  7     bool isObject = false;//防止 {}{}的判斷  8     bool isArray = false;//防止[][]的判斷  9 
 10     while (*p != '\0')  11  {  12         endChar = *p;  13         switch (*p)  14  {  15         case '{':  16             if (!isObject)  17  {  18                 isObject = true;  19  }  20             else  if (jsonstr.empty())//對象重複入棧
 21  {  22                 return false;  23  }  24             jsonstr.push('{');  25             break;  26         case '"':  27             if (jsonstr.empty() || jsonstr.top() != '"')  28  {  29                 jsonstr.push(*p);  30  }  31             else
 32  {  33  jsonstr.pop();  34  }  35             break;  36         case '[':  37             if (!isArray)  38  {  39                 isArray = true;  40  }  41             else  if (jsonstr.empty())//數組重複入棧
 42  {  43                 return false;  44  }  45             jsonstr.push('[');  46             break;  47         case ']':  48             if (jsonstr.empty() || jsonstr.top() != '[')  49  {  50                 return false;  51  }  52             else
 53  {  54  jsonstr.pop();  55  }  56             break;  57         case '}':  58             if (jsonstr.empty() || jsonstr.top() != '{')  59  {  60                 return false;  61  }  62             else
 63  {  64  jsonstr.pop();  65  }  66             break;  67         case '\\'://被轉義的字符,跳過  68             p++;  69             break;  70         default:  71  ;  72  }  73         p++;  74  }  75 
 76     if (jsonstr.empty())  77  {  78         //確保是對象或者是數組,以外的都不算有效 
 79         switch (startChar)//確保首尾符號對應  80  {  81         case  '{':  82  {  83             if (endChar = '}')  84  {  85                 return true;  86  }  87             return false;  88  }  89         case '[':  90  {  91             if (endChar = ']')  92  {  93                 return true;  94  }  95             return false;  96  }  97         default:  98             return false;  99  } 100 
101         return true; 102  } 103     else
104  { 105         return false; 106  } 107 }
相關文章
相關標籤/搜索