65cff15922d44672b89f2239cae33297.gif

说明

在开发中,服务端通常返回Json数据,我们需要将Json数据转模型对象来使用。

一般情况下,我们会使用一些第三方库来动态转化Model,但是Flutter中没有像Java的Gson/Jackson这类Json序列化类库,因为Flutter中禁用运行时反射。

官方解释是运行时反射会干扰Dart的tree shaking,使用tree shaking可以在release版中去除未使用的代码,这可以显著优化应用程序的大小。

由于反射会默认应用到所有代码,因此tree shaking会很难工作,因为在启用反射时很难知道哪些代码未被使用,因此冗余代码很难剥离,所以Flutter中禁用了Dart的反射功能,而正因如此也就无法实现动态转化Model的功能。 

json数据和model之间的转换-手动转换

json数据:

{
  "name": "loaderman",
  "age": 18
}

定义Model类:

class User {
  final String name;
  final int age;

  User({this.name, this.age});

  @override
  String toString() {
    return 'name:$name,age:$age';
  }
}

测试解析:

String jsonStr = "{\"name\":\"loaderman\",\"age\":18}";
var jsonMap = json.decode(jsonStr);
var user =
User(name: jsonMap['name'], age: jsonMap['age']);
print('$user');

控制台日志查看:

>> name:loaderman,age:18

这样一个简单的json转换就完成了

特别说明:

  • json_decode( ) :json 转 对象/数组 通常网路请求后的数据用此方法 转为我们需要的定义的对象 当第二个参数为true返回 array ,默认是false返回object。 

  • json_encode( ):对象/数组 转 json 成功返回 json 编码的 string ,失败返回 false 。

使用第三方工具生成

1.在线生成网站:

https://javiercbk.github.io/json_to_dart/

22f04c26005043e9f9c6ab053616b599.png

2.JsonToDart 插件【推荐】

在 Android Studio 中安装 JsonToDart 插件,

a.打开 Preferences(Mac)或者 Setting(Window),

b.选择 Plugins,搜索 JsonToDart

60c73446d8fbb07fee25a57d9b1bb823.png

点击 Install(上图已经安装),安装完成后重启即可

选定目录,点击右键,选择 New->Json to Dart

70f33b9ea45282bb1f61c9ef8cc51c7e.png

将json字符串复制进去,填写类明后,点击Generate按钮即可

72bc4b6d31c464b9b43db46d6c39f312.png

附快捷键: 

Windows:ALT + Shift + D

Mac:Option + Shift + D

  码上加油站

  一起来加油

长按扫码关注

58ddecbeae7ab8d24f504104cfb9f2a3.png记得点个在看哦!
Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐