首先要借助一个工具jsonformat 工具下载地址
举一个例子 json文件,来自玩安卓网站
这是一个相对很复杂的json文件
用jsonview打开查看,这个json文件包含一个data的数组和两个变量,然后数组的每一项又包含一个数组和6个变量,然后下一级数组的每一项又包含一个数组和6个变量
下面使用jsonformat 转换成dart bean文件
打开下载的jsonformat ,将json文件copy进去点击格式化
右边的红色是我们要填写的类名称,对应关系像这样,这里分别填写 tree children children ,后两个相同,点击生成bean
生成代码如下
import 'dart:convert' show json;
class tree {
int errorCode;
String errorMsg;
List<children> data;
tree(jsonStr) {
var jsonRes = json.decode(jsonStr);
errorCode = jsonRes['errorCode'];
errorMsg = jsonRes['errorMsg'];
data = [];
for (var dataItem in jsonRes['data']){
data.add(new children(dataItem));
}
}
@override
String toString() {
return '{"errorCode": $errorCode,"errorMsg": ${errorMsg != null?'${json.encode(errorMsg)}':'null'},"data": $data}';
}
}
class children {
int courseId;
int id;
int order;
int parentChapterId;
int visible;
String name;
List<children> children;
children(jsonRes) {
courseId = jsonRes['courseId'];
id = jsonRes['id'];
order = jsonRes['order'];
parentChapterId = jsonRes['parentChapterId'];
visible = jsonRes['visible'];
name = jsonRes['name'];
children = [];
for (var childrenItem in jsonRes['children']){
children.add(new children(childrenItem));
}
}
@override
String toString() {
return '{"courseId": $courseId,"id": $id,"order": $order,"parentChapterId": $parentChapterId,"visible": $visible,"name": ${name != null?'${json.encode(name)}':'null'},"children": $children}';
}
}
class children {
int courseId;
int id;
int order;
int parentChapterId;
int visible;
String name;
List<dynamic> children;
children(jsonRes) {
courseId = jsonRes['courseId'];
id = jsonRes['id'];
order = jsonRes['order'];
parentChapterId = jsonRes['parentChapterId'];
visible = jsonRes['visible'];
name = jsonRes['name'];
children = [];
for (var childrenItem in jsonRes['children']){
children.add(childrenItem);
}
}
@override
String toString() {
return '{"courseId": $courseId,"id": $id,"order": $order,"parentChapterId": $parentChapterId,"visible": $visible,"name": ${name != null?'${json.encode(name)}':'null'},"children": $children}';
}
}
接下来就是在APP中请求网络,将其转换成dart bean
///封装的get请求 _networkUtil,可以替换成自己的请求方式
///发起get网络请求并且转换json
Future<dynamic> requestGet(String url) {
return http.get(url)
.then((http.Response response) {
final String res = response.body;
final int statusCode = response.statusCode;
if (statusCode < 200 || statusCode > 400 || json == null) {
throw new Exception("Error while fetching data");
}
///有值
return _decoder.convert(res);
});
}
///这里返回的就是 Future<Tree> 对象,(fillUrl(TREE_LIST)是请求的url
Future<Tree> fetchTree() {
return _networkUtil.requestGet(fillUrl(TREE_LIST)).then((dynamic res) {
///可以这样取值
return new Tree.map(res);
});
}
转换成对象以后使用就很方便了,直接 点 就行了