删除按下的那一刻,曾经的一切,终将消逝,烟消云散,了无痕迹。
起初,刚入坑 Flutter,拿到后台返回 json 串,整我的是比较懵逼的。json
回想起 Android,从开始的 JsonArray、JsonObject,直到最后的 Gson,使用起来简直爽的嗨起~数组
而面对 Flutter 的解析 json,真的让我头大,倒不是有多难,而是没找对方式方法。工具
说一下本文重点:测试
文末已附上连接,不想看水文的小伙伴可直接拉到底,上手 0 基础。ui
目的:this
本文 json 对标网上找的一篇不错的 Flutter Json 处理的文章,文末已附上连接。spa
仅仅是个辅助工具,不包含对应的异常处理,毕竟,没学会走,就想跑?啥事儿不得慢慢来吗。code
虽然 Flutter 提供了 dart:convert 库,让咱们无缝解析 json,可是实际上对于我同样的小白,尤为刚刚入坑的小白,上手程度仍是有点费力。blog
那么,有没有一个神器,可让相似我同样 0 基础的开发者,垂手可得解析 json 呢?接口
闪亮登场:
官网点击右上角,选择 open quicktype:
按需选择对应操做:
因为关键解析实体仍是经过 quicktype 生成,这里简单的举个例子,让咱们一块儿来看,解析 json,到底多么 easy~
要解析的 json 串以下:
{ "id":"201314", "name":"HLQ_Struggle", "score" : 100 }
对应拷贝 quicktype 获取对应实体类:
// To parse this JSON data, do // // final student = studentFromJson(jsonString); import 'dart:convert'; Student studentFromJson(String str) => Student.fromJson(json.decode(str)); String studentToJson(Student data) => json.encode(data.toJson()); class Student { Student({ this.id, this.name, this.score, }); String id; String name; int score; factory Student.fromJson(Map<String, dynamic> json) => Student( id: json["id"], name: json["name"], score: json["score"], ); Map<String, dynamic> toJson() => { "id": id, "name": name, "score": score, }; }
使用贼方便,例如解析当前这个 json:
GestureDetector( child: _buildItemText('普通 json 解析'), onTap: () { showToast(studentFromJson(studentJson).name); }, ),
效果以下:
而普通实体转 json 也很 easy(固然这里我偷个懒):
GestureDetector( child: _buildItemText('普通 Bean 转 json'), onTap: () { showToast(studentToJson(studentFromJson(studentJson))); }, ),
效果以下:
先来看下咱们的 json 串:
{ "city": "张家口", "streets": [ "尚义", "张北" ] }
一样丢到 quicktype 获取最终的实体类:
import 'dart:convert'; Address addressFromJson(String str) => Address.fromJson(json.decode(str)); String addressToJson(Address data) => json.encode(data.toJson()); class Address { Address({ this.city, this.streets, }); String city; List<String> streets; factory Address.fromJson(Map<String, dynamic> json) => Address( city: json["city"], streets: List<String>.from(json["streets"].map((x) => x)), ); Map<String, dynamic> toJson() => { "city": city, "streets": List<dynamic>.from(streets.map((x) => x)), }; }
效果以下:
内容较为简洁,就不一一展现了~
推荐使用~