在http://www.json.org/JSON_checker/上有一个开源的工具,仅一个C文件、一个H文件,还附带UTF8转UTF16的转换工具。
将main函数修改了一下,便可作为工程的一个小模块使用,检查JSON字符串的合法性,以便于进行报文解析。
/*
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;
}
至此,该模块已经可以检测JSON字符串的合法性了,但是还是不支持中文字符,一旦输入合法的保含中文的JSON字符串还是会报错。
想了个简单的办法,将字符串中的中文字符全部以“*”替换掉,再进行合法性检测,检测通过,则可认为字符串是JSON报文。
/**
* @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;
}
如果有更好的办法处理中文字符,请不吝赐教。
**如若转载,请注明出处:http://blog.csdn.net/embedded_sky/article/details/44117911。
作者:super_bert@csdn**