iOS开发高手课
戴铭
前滴滴出行技术专家
立即订阅
11464 人已学习
课程目录
已完结 46 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词 | 锚定一个点,然后在这个点上深耕
免费
基础篇 (20讲)
01 | 建立你自己的iOS开发知识体系
02 | App 启动速度怎么做优化与监控?
03 | Auto Layout 是怎么进行自动布局的,性能如何?
04 | 项目大了人员多了,架构怎么设计更合理?
05 | 链接器:符号是怎么绑定到地址上的?
06 | App 如何通过注入动态库的方式实现极速编译调试?
07 | Clang、Infer 和 OCLint ,我们应该使用谁来做静态分析?
08 | 如何利用 Clang 为 App 提质?
09 | 无侵入的埋点方案如何实现?
10 | 包大小:如何从资源和代码层面实现全方位瘦身?
11 | 热点问题答疑(一):基础模块问题答疑
12 | iOS 崩溃千奇百怪,如何全面监控?
13 | 如何利用 RunLoop 原理去监控卡顿?
14 | 临近 OOM,如何获取详细内存分配信息,分析内存问题?
15 | 日志监控:怎样获取 App 中的全量日志?
16 | 性能监控:衡量 App 质量的那把尺
17 | 远超你想象的多线程的那些坑
18 | 怎么减少 App 电量消耗?
19 | 热点问题答疑(二):基础模块问题答疑
20 | iOS开发的最佳学习路径是什么?
应用开发篇 (12讲)
21 | 除了 Cocoa,iOS还可以用哪些 GUI 框架开发?
22 | 细说 iOS 响应式框架变迁,哪些思想可以为我所用?
23 | 如何构造酷炫的物理效果和过场动画效果?
24 | A/B 测试:验证决策效果的利器
25 | 怎样构建底层的发布和订阅事件总线?
26 | 如何提高 JSON 解析的性能?
27 | 如何用 Flexbox 思路开发?跟自动布局比,Flexbox 好在哪?
28 | 怎么应对各种富文本表现需求?
29 | 如何在 iOS 中进行面向测试驱动开发和面向行为驱动开发?
30 | 如何制定一套适合自己团队的 iOS 编码规范?
31 | iOS 开发学习资料和书单推荐
32 | 热点问题答疑(三)
原理篇 (6讲)
33 | iOS 系统内核 XNU:App 如何加载?
34 | iOS 黑魔法 Runtime Method Swizzling 背后的原理
35 | libffi:动态调用和定义 C 函数
36 | iOS 是怎么管理内存的?
37 | 如何编写 Clang 插件?
38 | 热点问题答疑(四)
原生与前端共舞 (5讲)
39 | 打通前端与原生的桥梁:JavaScriptCore 能干哪些事情?
40 | React Native、Flutter 等,这些跨端方案怎么选?
41 | 原生布局转到前端布局,开发思路有哪些转变?
42 | iOS原生、大前端和Flutter分别是怎么渲染的?
43 | 剖析使 App 具有动态化和热更新能力的方案
用户故事 (1讲)
用户故事 | 我是如何学习这个专栏的?
结束语 (1讲)
结束语 | 慢几步,深几度
iOS开发高手课
登录|注册

26 | 如何提高 JSON 解析的性能?

戴铭 2019-05-09
你好,我是戴铭。
在 iOS 开发中,我们都会碰到这样的问题:不同团队开发的库需要进行数据通信,而通信数据规范通常很难确定。今天,我们就来聊聊如何高效地解决这个问题吧。
同一个编程语言之间的数据通信非常简单,因为数据的规范都是相同的,所以输入和输出不需要做任何转换。但是,在不同编程语言之间进行数据通信,就会比较麻烦了。比如,一种语言按照自身的标准规范输出了一份数据,另一门语言接收到时需要依据自身编程语言标准进行数据对齐。
对齐一门语言的数据或许你还能够接受,但是如果对接的语言多了,你就需要写很多份能够与之对应的数据对齐转换代码。编写和维护的成本可想而知,那么目前有没有一种通用,而且各个编程语言都能支持的数据格式呢?
答案是有的。这个数据格式,就是我今天要跟你聊的 JSON。
接下来,在今天这篇文章中,我会先和你聊聊什么是 JSON;然后,再和你说说 JSON 的使用场景,以及 iOS 里是如何解析 JSON 的;最后,再和你分析如何提高 JSON 的解析性能。

什么是 JSON?

JSON ,是 JavaScript Object Notation 的缩写。其实,JSON 最初是被设计为 JavaScript 语言的一个子集,但最终因为和编程语言无关,所以成为了一种开放标准的常见数据格式。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《iOS开发高手课》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(16)

  • 张蒙
    戴老师给我传达的思维方式。阶段一,能用就好。阶段二,能不能更好。显然,第二种更有利于自己的进步。
    2019-05-09
    7
  • 连腾锋
    YYmodel 方便,效率还好
    2019-05-09
    4
  • bo
    NSJSONSerialization 在解析值是 null 的时候。并不会百分之百返回 NSNull,结果是随机的。有空数组,NSNull,还有值是 0 的 NSNumber。由于业务没有过滤 NSNumber 导致把它当作 NSDictionary 来处理出现了消息不响应的 crash。对于这类问题,老师是否有好的解决办法?

    作者回复: JSON 解析后的处理可以参看三方库的处理

    2019-05-09
    3
  • Jeffrey
    我用的是Objective-C Foundation中自带的方法 NSJSONSerialization来解析json 本文中提到的simdjson 比iOS系统自带的json解析效率高吗?是不是以后可以用simdjson来替代 NSJsonSerialization
    2019-05-09
    3
  • Geek
    什么时候会有1GB流量的JSON需要解析,对于大多数的接口来说,常用的0.2GB/s和2.2GB/s,效果是一样的
    2019-05-22
    1
  • 这个shaonian不太冷丶
    Simdjson如何在iOS中使用呢
    2019-05-10
    1
  • 梅长苏
    那mjextention解析效率如何?

    作者回复: 用的系统 NSJSONSerialization

    2019-05-09
    1
  • Jeffrey
    我把simdjson代码下载下来 写一个OC解析json的 demo , 但是效率没有 NSJSONSerialization 高 希望老师有空了帮忙看下 simdjson 是否做的比系统的NSJSONSerialization 更好 能否提高开发效率

    https://github.com/BestiOSDev/MTSimdjson
    2019-06-21
  • Jeffrey
    目前手动解析json不需要用什么库 效率还可以 😂 yymodel都说了 媲美直接解析json
    2019-06-07
  • xilie
    在 Swift 原生提供 JSONDecoder 之后,相对于一些大名鼎鼎的第三方库,是否更推荐使用语言自带的 JSONDecoder 呢?

    作者回复: 三方也是用的 JSONDecoder

    2019-05-29
  • xilie
    为什么 JSONDecoder 只有 1 个 decode Data 方法,没有 decode JSONObject 的方法?很多时候拿到的就是 JSONObject,这时用 JSONDecoder decode,还要先转为 Data,多此一举啊
    2019-05-29
  • 梦翼
    项目中解析MJExtension来解析json,但存在明显的性能问题,目前解析一个数据模型需要20ms左右,导致有明显的卡顿现象,准备向yyModel转型。
    2019-05-20
    1
  • 大太阳
    我现在的项目就是纯swift的项目,现在绝大部分用的json解析都是swiftyjson,一小部分是kvc,前着使用时代码量多一些,后者基本不用怎么修改,想问下戴老师,swiftyjson的效率怎么样?还有希望戴老师可以指导下我们怎么测这个效率吗?市面上的这些比较出名的第三方解析库,的效率排名是怎么样的,kvc是在里面能排到第几呢?

    作者回复: swiftyjson 解析时使用的是系统 JSONSerialization 方法,本质上和系统解析 JSON 效率并无区别

    2019-05-17
  • 木木彡
    simdjson 不是还不支持移动设备常用的ARM处理器吗?
    2019-05-16
    1
  • 柠檬
    simdjson 会比 NSJSONSerialization更快?我们项目中都使用系统的解析json 然后使用yymodel来将它再转换一次
    2019-05-10
  • 谭鹏
    JSONKit 效率很好
    2019-05-10
收起评论
16
返回
顶部