json不合法的时候,由字符串转成json可能会导致程序复位,没有试cjson是不是这样,cjson也有别的bug。而C语言又不能try。为了防止意外的发送了不合法的json字符串,就想到了校验它合法性的方法。
在网上找到一个开源的项目,所以不用自己造轮子了:原项目地址
在此基础上,自己改了下写成了一个函数:
uint8_t Jchecker(char* jcdata)
{
/*
Read STDIN. Exit with a message if the input is not well-formed JSON text.
jc will contain a JSON_checker with a maximum depth of 20.
*/
JSON_checker jc = new_JSON_checker(20);
for (int i=0;;i++)
{
int next_char = jcdata[i];
if (next_char <= 0) {
printf("JSON_checker_char:json correct\n");
return 0;
}
if (!JSON_checker_char(jc, next_char)) {
printf("JSON_checker_char: syntax error\n");
return 1;
}
}
if (!JSON_checker_done(jc)) {
printf("JSON_checker_end: syntax error\n");
return 1;
}
}
唯一有点坑的地方是,它对结尾的"}"不敏感,没有也不会报错。