Flutter -- JSON解析

如题所述

第1个回答  2022-06-04

由于 Flutter 不支持运行时反射,JSON 解析完全是手动的。
所谓手动解析,是指使用 dart:convert 库中内置的 JSON 解码器,将 JSON 字符串解析成自定义对象的过程。使用这种方式,我们需要先将 JSON 字符串传递给 JSON.decode 方法解析成一个 Map,然后把这个 Map 传给自定义的类,进行相关属性的赋值。

下面动手解析一个用户的信息

首先,我们根据 JSON 结构定义 User类,并创建一个工厂类,来处理 User 类属性成员与 JSON 字典对象的值之间的映射关系:

数据解析类创建好了,剩下的事情就相对简单了,我们只需要把 JSON 文本通过 JSON.decode 方法转换成 Map,然后把它交给 User 的工厂类 fromJson 方法,即可完成 User 对象的解析:

项目中往往会碰到 嵌套对象属性 情况,

面对这种情况,我们需要为每一个非基本类型属性创建一个解析类。

然后,我们只需要在 User 类中,增加 dog 属性及对应的 JSON 映射规则即可:

通过这种方法,无论对象有多复杂的非基本类型属性,我们都可以创建对应的解析类进行处理。

不过到现在为止,我们的 JSON 数据解析还是在主 Isolate 中完成。如果 JSON 的数据格式比较复杂,数据量又大,这种解析方式可能会造成短期 UI 无法响应。下面我们可以用 compute 函数优化一下

通过 compute 的改造,我们就不用担心 JSON 解析时间过长阻塞 UI 响应了。