Flutter:Json映射到对象,超级简单

首先要借助一个工具jsonformat 工具下载地址

举一个例子 json文件,来自玩安卓网站

这是一个相对很复杂的json文件

用jsonview打开查看,这个json文件包含一个data的数组和两个变量,然后数组的每一项又包含一个数组和6个变量,然后下一级数组的每一项又包含一个数组和6个变量
《Flutter:Json映射到对象,超级简单》

下面使用jsonformat 转换成dart bean文件

打开下载的jsonformat ,将json文件copy进去点击格式化
《Flutter:Json映射到对象,超级简单》

右边的红色是我们要填写的类名称,对应关系像这样,这里分别填写 tree children children ,后两个相同,点击生成bean
《Flutter:Json映射到对象,超级简单》

生成代码如下

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);
    });
  }

转换成对象以后使用就很方便了,直接 点 就行了
《Flutter:Json映射到对象,超级简单》

    原文作者:bergerjun
    原文地址: https://blog.csdn.net/u014205247/article/details/80652350
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞