• dart flutter json 转 model 常用库对比 json_serializable json_model JsonToDart


    1.对比

    我是一个初学者,一直跟着教材用原生的json,最近发现实在太麻烦了.所以搜索了一下,发现真的有很多现成的解决方案.

    网页

    https://app.quicktype.io/?l=dart

    这个是测试下来最好用的

    有很多选项,可以使用 json_serializable 也可以不使用

    json_serializable

    这是推荐最多的,也是 pub.dev likes最多的,

    优点:

    1.可以 识别 key 和 dart代码中的"name" 不相同的代码, 例如 {"name":"姓名"} 把 name 改为 dart中的 变量 name2 

    2.可以使用 命令行自动生成

    缺点:

    书写 model 麻烦.不能直接从json 生成 dart model

    依赖 json_annotation(暂且算一个缺点把)

    json_model

    一个命令行工具,用于从json 生成json_annotation 的model 文件

    作者是 <Flutter实战·第二版> 的作者,估计是为了配合 写书,所以只有1.0版本,但是书中有代码说明,自己修改的话估计比较容易

    优点: 支持多种格式(比如 类型 数组 以及 List<自定义类型> 注释 引入dart文件 等)

    缺点:

    {"bbb": {"bbb1": 10,"bbb2": 20}}会被识别为 Map 

    {"friends":[{"name": "中文","age": 10}]}需要书写为

     {"friends":"$[]friends"} 然后再自定义一个 friends的model

    JsonToDart

    有两个,其中一个下载量很大的不支持 Android Studio,只支持 JetBrains(要花钱买)

    我只测试了 支持 Android Studio. 

    缺点:

    生成代码的时候 需要手动capy 代码到编辑框中(和使用网页差不多).

    同样{"bbb": {"bbb1": 10,"bbb2": 20},"friends":[{"name": "中文","age": 10}]}

    bbb会被识别为 Map ,

    friends可以正常转换为 List 命名还是比较舒服的

    优点:

    代码不依赖 其他库

    网页1

    https://caijinglong.github.io/json2dart/index_ch.html

    生成  json_serializable 代码

    {"bbb": {"bbb1": 10,"bbb2": 20},"friends":[{"name": "中文","age": 10}]} 都能识别为 model

    缺点:

    friends 不会识别为 friend(无法识别英文复数)

    需要手动复制代码到网页框

    依赖 json_serializable 还需要再次build

    网页2

    https://jsontodart.zariman.dev/
    https://github.com/shiburagi/JsonToDart

    这个好像支持 vs code 插件.

    优点:

    生成的代码不依赖其他库

    {"bbb": {"bbb1": 10,"bbb2": 20},"friends":[{"name": "中文","age": 10}]} 都能识别为 model

    缺点:

    friends 不会识别为 friend(无法识别英文复数)

    需要手动复制代码到网页框

    生成的代码需要简单修改 否则会报错

    例如:

    c{

    String dbDir;
    c({this.dbDir}); //这行需要删除 {}
    }
    

    2.结论

    不依赖 json_serializable 的方案 在 json 和 model 不完全一致(比如key名字不一样)的情况比较麻烦,

    只有json_model能写注释但是写起来麻烦

  • 相关阅读:
    如何写成高性能的代码(三):巧用稀疏矩阵节省内存占用
    R语言将连续变量映射到颜色或尺寸上二
    13. MIC配置
    PDMS二次开发(二十)——关于1.0.2.0版本升级内容的说明
    【web3j】java调用链上合约里的方法
    G1D23-RAGA&报名蓝桥&Attackg&安装cuda&torch
    [小程序开发之uniapp]页面与路由
    基于autojs,实现每日自动报送学习积分
    【嵌入式】VNC Viewer远程连接树莓派
    重组件的优化和页面渲染十万条数据
  • 原文地址:https://blog.csdn.net/tangshangkui/article/details/133304483