昨天完成了一个小作业,使用 Swift 语言,做了一个 json 解析器。感觉还是很有意义的,毕竟我实在是太久没写代码了,学点新东西的感觉还不错。
太久没写代码的我??
首先我需要一个 swift 编译环境,swift 主要在 Mac OS 上编译运行,当然我没有 mac ,那就另寻办法吧
我先建了一个 mac 虚拟机,意料之中的卡得不行,鼠标滚动一顿一顿的,看得我脑袋疼,遂放弃。
然后尝试黑苹果。研究了几个星期,还是没啥进展——我的美帝良心Yoga C940,遍寻全网,都没有这台机器的黑苹果案例,现在还卡在BIOS和驱动上呢,联想没有把最新BIOS镜像放出来,我真不知道怎么办了???由于原有固态硬盘不兼容黑苹果,我还顺便换了个 1T 的新固态
黑苹果和公众号都卡在一半了??
Swift 5.3版本中,添加了对 Windows 的支持,然鹅短短时间内,还没有 IDE 可用,只有所谓的工具链——反正我不会。
剩下的只有在线编译了,令我惊喜的是在线编译其实还蛮好用的,直接上手,命令行交互。除非需要做 GUI,否则就用 Swift Online 其实也不错。
不错的在线编译
好了,环境有了,只不过当我开工的时候,距离ddl还有不到半天的时间,,,????
json 是轻量化的数据存储、传递格式。在我看来,语法简单、固定的 json,就是为解析而生。
json 的语法相当简单,只有三种元素:数组、对象、属性。数组就是由 [ ] 方括号包围的一组对象,对象就是由 { } 大括号包围起来的一组属性。而其中,这些元素可以互相嵌套,因此可以表示复杂的关系。
这语法着实简单,两句话概括完毕??
JSON 格式很容易解析,容易到什么程度呢?容易到一个极简的实现只需要半小时不到即可搞定,于是就有了这篇文章,半小时带你实现一个 JSON 解析器,真的只要半小时哦。
https://zhuanlan.zhihu.com/p/28049617
如上链接便是解析 json 的核心方法 ↑ ↑ ↑ ,我的代码主要思路便是继承至此,在其基础上增加了过滤换行、空格,再以 Swift 实现,好吧实在是没啥技术含量???
以下便是 json 解析器的核心内容:
解析器接口:
func jsonparse(JsonString s:String)->Any
传入一个 json 字符串 JsonString,返回一个 Any 类型的解析结果。json 当中,外层的结构可以是数组,也可以是对象,因此这个 Any 可以是 Array,或者 Dictionary(表示对象)
解析算法的核心思想相当简单:
从头到尾遍历字符,当你遇到 "{" 时,就是遇到了一个对象,调用解析对象函数 func parse_object(s:String,i:Int) ,返回一个 Dictionary ;
当你遇到 "[" 时,就是遇到了一个数组,调用解析数组函数 func parse_array(s:String,i:Int) ,返回一个 Array ;
同理,当你遇到 "\"" (双引号)时,就是遇到了一个字符串,当你遇到 n 时,就是 null ,遇到 t 就是 true ,遇到 f 就是 false ,遇到数字就是数字,,,
分别调用对应的解析函数,就能在层层嵌套结构中抽丝剥茧,返回正确的对象。
解析数组函数,其中可能有嵌套
运行实例如下,输入一个 json 字符串就可以啦:
好了,到此为止,搞定!??