c++ JsonCpp Parse对Json字符串解析转换判断的补充 Json格式验证
2021-07-10 21:06
标签:span sar std art 解析 ack 导致 ++ case 最近在使用JsonCpp的时候,需要判断当前字符串是否为正确的Json格式,但是Jsoncpp对字符串进行认为是正确的json数据,导致获取的时候出错 添加一个验证的方法,在转换之前,提前验证数据是否正确,正确之后才能进行转换 c++ JsonCpp Parse对Json字符串解析转换判断的补充 Json格式验证 标签:span sar std art 解析 ack 导致 ++ case 原文地址:https://www.cnblogs.com/mingxh/p/9552583.html 1 bool IsJsonIllegal(const char *jsoncontent)
2 {
3 std::stackchar> 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 }
上一篇:python使用和注意
文章标题:c++ JsonCpp Parse对Json字符串解析转换判断的补充 Json格式验证
文章链接:http://soscw.com/index.php/essay/103401.html