cJSON代码阅读(6)——解析JSON数值
来源:互联网 发布:淘宝订单险坑卖家 编辑:程序博客网 时间:2024/06/08 06:06
parse_number是进行json数值解析的函数。
1、首先判断数值是否有负号
2、跳过数值开头的0
3、计算数值的整数部分——从字符串转换为数字
4、计算数值的小数部分——从字符串转换为数字
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;}
0 0
- cJSON代码阅读(6)——解析JSON数值
- cJSON代码阅读(5)——解析JSON字符串
- cJSON代码阅读(7)——解析JSON数组
- cJSON代码阅读(8)——解析JSON对象
- cJSON代码阅读(10)——把数值构造成JSON格式
- cJSON代码阅读(4)——解析JSON数据的流程
- cJSON代码阅读(1)——JSON介绍
- cJSON代码阅读(2)——cJSON介绍
- cJSON代码阅读(3)——cJSON的数据结构
- cJSON代码阅读(9)——构造json数据的流程
- json快速入门(cjson解析)
- cJSON 解析JSON实例
- 使用cJSON解析JSON字符串
- 使用cJSON解析JSON字符串
- cjson 解析json配置文档
- 使用cJSON解析JSON字符串
- 使用cJSON解析JSON字符串
- 使用cJSON解析JSON字符串
- python手记(53)
- Android:手势识别
- 安装 tengine
- jquery操作select(取值,设置选中)
- PKI体系及常见证书
- cJSON代码阅读(6)——解析JSON数值
- 安卓动画技术
- 使用Objective-C获取每日必应壁纸设置为桌面
- Html5添加图片分类过滤特效插件教程
- maven仓库找不到需要的jar包解决办法
- SVN创建新文件不能提交的处理
- 仿IOS Switch控件
- 数据库设计步骤--了解用户需求:与客户会面
- 安装Hadoop,启动hadoop(每次都用),设置免密码登陆