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

來源:互聯網
上載者:User

標籤:span   sar   std   art   解析   ack   導致   ++   case   

最近在使用JsonCpp的時候,需要判斷當前字串是否為正確的Json格式,但是Jsoncpp對字串進行認為是正確的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     else104     {105         return false;106     }107 }

 

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.