自己动手解Json!(IOS利用分治法解析Json)(一)

本文探讨了在iOS开发中解析JSON数据的挑战,并提出利用分治算法作为解决方案。作者指出,虽然iOS解析JSON不如Java方便,但通过理解分治策略,可以实现自定义的JSON解析器。文章介绍了分治算法的三个步骤,并阐述了如何将这些步骤应用于解析JSON。通过分解JSON数据,递归处理键值对,并将结果合并,实现了高效解析。文中还提到了需要编写判断特定字符位置的方法,为后续的详细实现埋下伏笔。
摘要由CSDN通过智能技术生成

  最近在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)(二)

  

  

   

  

  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值