cJSON代码阅读(8)——解析JSON对象
来源:互联网 发布:python爬虫代码 编辑:程序博客网 时间:2024/06/05 10:59
parse_object是进行json对象解析的函数。
1、首先判断待处理数据是不是对象(以左大括号开始)
2、跳过数组的左大括号,跳过空白字符
3、如果紧接着的是右大括号,那么表示对象是空的,返回
4、使用parse_string处理对象中第一个属性(也可以叫键值对,我比较喜欢把对象里的键值对叫做属性)的名字,判断紧接着的是不是一个冒号,如果不是,那么表示属性只有名字而没有值,错误。如果没有出错,使用parse_value处理第一个属性的值
5、跳过空白字符之后,判断紧接着的是不是逗号,如果是逗号,那么表示对象还有其他属性,则进入一个循环,依次处理每一个属性
1、首先判断待处理数据是不是对象(以左大括号开始)
2、跳过数组的左大括号,跳过空白字符
3、如果紧接着的是右大括号,那么表示对象是空的,返回
4、使用parse_string处理对象中第一个属性(也可以叫键值对,我比较喜欢把对象里的键值对叫做属性)的名字,判断紧接着的是不是一个冒号,如果不是,那么表示属性只有名字而没有值,错误。如果没有出错,使用parse_value处理第一个属性的值
5、跳过空白字符之后,判断紧接着的是不是逗号,如果是逗号,那么表示对象还有其他属性,则进入一个循环,依次处理每一个属性
6、跳过空白字符,判断紧接着的是不是右大括号,如果不是,表示大括号不匹配,出错!如果没有错误,那么返回下一个json数据的位置
/* Build an object from the text. */// 解析对象static const char *parse_object(cJSON *item,const char *value){ cJSON *child; // 判断是否以左大括号开始 if (*value!='{') { ep=value; return 0; }/* not an object! */ item->type=cJSON_Object; // 跳过空白字符 value=skip(value+1); // 如果下一个字符就是右大括号,那么表示,对象处理结束(同时表示这个对象是空的) if (*value=='}') return value+1;/* empty array. */ item->child=child=cJSON_New_Item(); if (!item->child) return 0; // 先跳过空白字符,然后解析对象里面的属性的名字(字符串),然后再跳过空白字符 // 属性的名字都是字符串 value=skip(parse_string(child,skip(value))); // 判断是否出错 if (!value) return 0; // 记录对象中,属性的名字 child->string=child->valuestring; child->valuestring=0; // 如果当前字符不是冒号,那么表示,这个属性只有名字而没有值,错误!!! if (*value!=':') { ep=value; return 0; }/* fail! */ // 跳过冒号,跳过空白字符,解析属性的值,再跳过空白字符 value=skip(parse_value(child,skip(value+1)));/* skip any spacing, get the value. */ // 是否出错 if (!value) return 0; // 如果当前字符是逗号,表示后面还有属性,继续解析 while (*value==',') { cJSON *new_item; if (!(new_item=cJSON_New_Item())) return 0; /* memory fail */ child->next=new_item; new_item->prev=child; child=new_item; value=skip(parse_string(child,skip(value+1))); if (!value) return 0; child->string=child->valuestring; child->valuestring=0; if (*value!=':') { ep=value; return 0; }/* fail! */ value=skip(parse_value(child,skip(value+1)));/* skip any spacing, get the value. */ if (!value) return 0; } // 判断当前字符是否位右边大括号,如果不是表示出错 if (*value=='}') return value+1;/* end of array */ ep=value; return 0;/* malformed. */}
0 0
- cJSON代码阅读(8)——解析JSON对象
- cJSON代码阅读(5)——解析JSON字符串
- cJSON代码阅读(6)——解析JSON数值
- cJSON代码阅读(7)——解析JSON数组
- cJSON代码阅读(4)——解析JSON数据的流程
- cJSON代码阅读(1)——JSON介绍
- cJSON代码阅读(2)——cJSON介绍
- cJSON代码阅读(3)——cJSON的数据结构
- cJSON代码阅读(9)——构造json数据的流程
- cJSON代码阅读(10)——把数值构造成JSON格式
- json快速入门(cjson解析)
- cJSON 解析JSON实例
- 使用cJSON解析JSON字符串
- 使用cJSON解析JSON字符串
- cjson 解析json配置文档
- 使用cJSON解析JSON字符串
- 使用cJSON解析JSON字符串
- 使用cJSON解析JSON字符串
- 最新版SDWebImage的使用
- 原生二维码的识别
- scrollview遇到navigationController会自动设置一个顶部64的inset解决办法
- 万年历程序--C++编写
- Spring MVC - 基本知识 与 非注解/注解方式开发示例
- cJSON代码阅读(8)——解析JSON对象
- iOS图片加载速度极限优化—FastImageCache解析
- Apache cloudera hortonworks 与cdh ambari cm hdp hadoop生态圈的关系
- 网页显示本地时间,不刷新网页代码
- 比较两个表的数据 优化
- spring aop的三个关键概念
- JS----简单的城市级联
- I/O流类库(一)
- 《Effective java》读书记录-第7条-避免使用终结方法