json解析数组 nlohmann_Swift Online Compiler做一个json解析器

昨天完成了一个小作业,使用 Swift 语言,做了一个 json 解析器。感觉还是很有意义的,毕竟我实在是太久没写代码了,学点新东西的感觉还不错。

669d9384ea4204dd0d61a835db594de1.png

太久没写代码的我??

首先我需要一个 swift 编译环境,swift 主要在 Mac OS 上编译运行,当然我没有 mac ,那就另寻办法吧

我先建了一个 mac 虚拟机,意料之中的卡得不行,鼠标滚动一顿一顿的,看得我脑袋疼,遂放弃。

然后尝试黑苹果。研究了几个星期,还是没啥进展——我的美帝良心Yoga C940,遍寻全网,都没有这台机器的黑苹果案例,现在还卡在BIOS和驱动上呢,联想没有把最新BIOS镜像放出来,我真不知道怎么办了???由于原有固态硬盘不兼容黑苹果,我还顺便换了个 1T 的新固态

bda1025872b6ae98d7ae98265c936032.png

黑苹果和公众号都卡在一半了??

Swift 5.3版本中,添加了对 Windows 的支持,然鹅短短时间内,还没有 IDE 可用,只有所谓的工具链——反正我不会。

剩下的只有在线编译了,令我惊喜的是在线编译其实还蛮好用的,直接上手,命令行交互。除非需要做 GUI,否则就用 Swift Online 其实也不错。

d80b10b59807bcc5e24c5a5e75f33384.png

不错的在线编译

好了,环境有了,只不过当我开工的时候,距离ddl还有不到半天的时间,,,????


json 是轻量化的数据存储、传递格式。在我看来,语法简单、固定的 json,就是为解析而生。

json 的语法相当简单,只有三种元素:数组、对象、属性。数组就是由 [ ] 方括号包围的一组对象,对象就是由 { } 大括号包围起来的一组属性。而其中,这些元素可以互相嵌套,因此可以表示复杂的关系。

这语法着实简单,两句话概括完毕??

JSON 格式很容易解析,容易到什么程度呢?容易到一个极简的实现只需要半小时不到即可搞定,于是就有了这篇文章,半小时带你实现一个 JSON 解析器,真的只要半小时哦。

https://zhuanlan.zhihu.com/p/28049617

如上链接便是解析 json 的核心方法 ↑ ↑ ↑ ,我的代码主要思路便是继承至此,在其基础上增加了过滤换行、空格,再以 Swift 实现,好吧实在是没啥技术含量???

以下便是 json 解析器的核心内容:

1291ba4e77eebd42ff8a9a1782b057f3.png

解析器接口:

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 ,遇到数字就是数字,,,

分别调用对应的解析函数,就能在层层嵌套结构中抽丝剥茧,返回正确的对象。

d5ae828bf42098b91a058461ee1c1c65.png

解析数组函数,其中可能有嵌套

运行实例如下,输入一个 json 字符串就可以啦:

187d0d5a0ca4570f8477b02f814fa3a8.png

好了,到此为止,搞定!??

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值