C語言JSON字串合法性檢查
在http://www.json.org/JSON_checker/上有一個開源的工具,僅一個C檔案、一個H檔案,還附帶UTF8轉UTF16的轉換工具。
將main函式修改了一下,便可作為工程的一個小模組使用,檢查JSON字串的合法性,以便於進行報文解析。
1
2
3
/*
Read input string and check.
if not json string return -1, else return 0.
jc will contain a JSON_checker with a maximum depth of 20.
*/
int json_checker(const char *json_str)
{
JSON_checker jc = new_JSON_checker(20);
int len = strlen(json_str);
int tmp_i = 0;
for (tmp_i = 0; tmp_i < len; tmp_i++)
{
int next_char = json_str[tmp_i];
if (next_char <= 0)
{
break;
}
if (0 == JSON_checker_char(jc, next_char))
{
fprintf(stderr, "JSON_checker_char: syntax error\n");
return -1;
}
}
if (0 == JSON_checker_done(jc))
{
fprintf(stderr, "JSON_checker_end: syntax error\n");
return -1;
}
return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
至此,該模組已經可以檢測JSON字串的合法性了,但是還是不支援中文字元,一旦輸入合法的保含中文的JSON字串還是會報錯。
想了個簡單的辦法,將字串中的中文字元全部以“*”替換掉,再進行合法性檢測,檢測通過,則可認為字串是JSON報文。
1
2
/**
* @function 將中文字元替換為'*' 用於json字串合法性檢查
* @ in json string
* @author super bert
*/
int replace_character(char *string)
{
if (string == NULL)
{
printf("No string buf...\n");
return -1;
}
while(*string++ != '\0')
{
if (((*string) < 0x00) || ((*string) > 0x7F))
{
*string = '*';
}
}
return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
如果有更好的辦法處理中文字元,請不吝賜教。
**如若轉載,請註明出處:http://blog.csdn.net/embedded_sky/article/details/44117911。
作者:[email protected]**
---------------------
作者:super_bert
來源:CSDN
原文:https://blog.csdn.net/embedded_sky/article/details/44117911
版權宣告:本文為博主原創文章,轉載請附上博文連結!