自己动手解Json!(IOS利用分治法解析Json)(一)
来源:互联网 发布:社交软件源码 编辑:程序博客网 时间:2024/05/17 09:01
最近在IOS项目中需要从服务器端获取Json数据然后本地解析,本来任务非常简单的事情没想到后来还挺复杂 具体遇到的问题和解决方法我会在另一篇博客中写出,总之,
IOS解析Json显然不如JAVA那么方便,容错率高,另外说一下Java解析Json首推Gson,相当好用
后来自己想,为什么不自己写一个解析Json的类呢,仔细研究了Json的结构,发现利用算法中的分治法来解决是极好的
先介绍一个分治算法的思想(出自算法导论):
分治法在每一层递归上都有三个步骤:
分解(Devide): 将问题分解成一系列子问题
解决(Conquer):递归的解决各子问题,若子问题足够小,则直接求解
合并(Combine):将子问题的结果合并成原问题的解
说了这么多,其实我觉得分治法就是我们平常说的"递归"
为什么说解析Json适合分治法呢,因为其实解析Json也依照了上述模式:
分解(Divide): Json数据可分为 键:值 的问题
解决(Conquer):对于值不为{}这种对象的和[]这种数组的,可以直接取其键和对应的值,对于值为{}这种对象和[]这种数组,递归求其值
合并(Combine):将的到的键与值写入到结果中
解决思路有了,下面就要想解决方法了,在写项目的时候,最好先把整个工程中需要重复解决的问题抽象出来,写成一个方法
比如有一个Json数据 {"firstName":"Brett","lastName":"McLaughlin","email":"aaaa"}
我可能需要重复判断"的位置来判断"键"和"值",也还需要判断"{""}"这种符号来确定对象所在的范围,所以我需要有一个判断特定位置之后的特定字符的位置的方法
代码如下:
// {"":"","":{}}/* 根据传入的Json字符串与开始寻找的位置,给出下一个所需要查找的字符出现的位置 注意如果开始寻找的位置就是给定的字符的话,就返回这个开始寻找的位置 如果没有就返回-1 */-(int) searchNextSign:(char) signChar formString:(NSString *)dicJsonString beginPostion:(int) beginPostion { long stringLenght = dicJsonString.length; int nextSignPostion = -1; char postionChar; for (int i=beginPostion; i<stringLenght; i++) { postionChar = [dicJsonString characterAtIndex:i]; //如果等于传入的signChar的话,说明找到了,那么就可以结束循环,并返回 if (postionChar == signChar) { nextSignPostion = i ; break; } } return nextSignPostion;}
第一篇就先暂时写到这吧
第二篇链接: 自己动手解Json!(IOS利用分治法解析Json)(二)
- 自己动手解Json!(IOS利用分治法解析Json)(一)
- 自己动手解Json!(IOS利用分治法解析Json)(二)
- 自己动手解Json!(IOS利用分治法解析Json)(三)
- IOS JSON数据解析(一)
- iOS利用AFNetworking进行JSON数据解析
- iOS利用AFNetworking进行JSON数据解析
- iOS利用AFNetworking进行JSON数据解析
- IOS解析JSON数据格式错误一
- 利用JSON解析函数
- ios 解析json
- iOS 解析json
- IOS解析Json数据
- IOS JSON详细解析
- iOS JSON解析
- iOS JSON解析
- IOS解析JSON
- IOS解析JSON
- IOS:JSON解析
- JavaScript实现禁用键盘和鼠标的点击事件
- hdu 5234 Happy birthday(格子图上的01背包)
- ListView 的标准写法
- C++继承时派生类与基类有同名函数时如何分别引用
- LeetCode——Palindrome Number
- 自己动手解Json!(IOS利用分治法解析Json)(一)
- Eclipse里面找不到DatabaseExplorer,怎么办?
- 文件上传与下载(二)smartupload
- xml 配置说明
- 慢一点,再慢一点
- jquery mobile的tap()事件以及jQuery事件的delegate()方法
- python及hadoop学习网址
- 文件搜索命令grep
- 渣渣ACM日记——1005-Number Sequence(HDOJ)