概述
parse_number是进行json数值解析的函数。
1、首先判断数值是否有负号
2、跳过数值开头的0
3、计算数值的整数部分——从字符串转换为数字
4、计算数值的小数部分——从字符串转换为数字
5、返回下一个json数据的位置
/* Parse the input text to generate a number, and populate the result into item. */
// 解析数值
static const char *parse_number(cJSON *item,const char *num)
{
double n=0,sign=1,scale=0;int subscale=0,signsubscale=1;
// 记录是否有负号
if (*num=='-')
sign=-1,num++; /* Has sign? */
// 跳过开头的0
if (*num=='0')
num++; /* is zero */
// 记录真正的数值(并计算)
if (*num>='1' && *num<='9')
do
n=(n*10.0)+(*num++ -'0');
while (*num>='0' && *num<='9'); /* Number? */
// 如果有小数点,那么计算剩下的小数部分
if (*num=='.' && num[1]>='0' && num[1]<='9')
{
num++;
do
n=(n*10.0)+(*num++ -'0'),scale--;
while (*num>='0' && *num<='9');
} /* Fractional part? */
// 如果是指数,那么还需要计算,求指之后的数值
if (*num=='e' || *num=='E') /* Exponent? */
{
num++;
if (*num=='+')
num++;
else if (*num=='-')
signsubscale=-1,num++; /* With sign? */
while (*num>='0' && *num<='9')
subscale=(subscale*10)+(*num++ - '0'); /* Number? */
}
n=sign*n*pow(10.0,(scale+subscale*signsubscale)); /* number = +/- number.fraction * 10^+/- exponent */
// 记录类型以及数据
item->valuedouble=n;
item->valueint=(int)n;
item->type=cJSON_Number;
return num;
}
最后
以上就是朴素美女为你收集整理的cJSON代码阅读(6)——解析JSON数值的全部内容,希望文章能够帮你解决cJSON代码阅读(6)——解析JSON数值所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复