Flutter的Json解析

Flutter的Json解析

一起从0开始学习Flutter!

Json是我们最常用的数据传输格式,我们需要在发送数据的时候将对象转为Json,在收到数据后将Json转为对象,这需要我们的转化,我们可以自己手解这些Json字符串,也可以利用一些第三方库帮我们自动转化。
手动转化的我们引入转化的类库:

    import 'dart:convert';

引入之后我们就可以直接使用json库来帮助我们进行json和实体的转化了。
json解析:

    String jsonStr = '{"username":"flutter","password":"pwd"}';
    Map<String,dynamic> decode = json.decode(jsonStr);//这里帮助我们将json的字符串转为了Map集合
    print("username is ${decode['username']}");//这里使用Map的读取方式来获取username作为key的值

我们再把上面的decode转为json看是否可以:

    String codeStr = json.encode(decode);//直接将需要转的对象encode就可以了
    print("codeStr is ${codeStr}");//打印已经转为json的字符串

这是比较简单的json解析方式,我们再看下我们在项目中最常用的使用Json转对象的方法,我们可以在其他的平台看到有很多的转化的类库,我们这里使用官方提供给我们的json_serializable。
引入第三方的自动转化库:

dependencies:
  json_annotation: ^3.0.1
  json_serializable: ^3.3.0

创建一个实体类:,可以通过网站转换json获取。

网站地址:https://caijinglong.github.io/json2dart/index_ch.html

左侧输入json,即可生成如下所示文件

import 'package:json_annotation/json_annotation.dart';//引入第三方的类库
part 'user.g.dart';//在我们编译时会自动生成
@JsonSerializable()//这里告诉编译器它是一个需要解析json的类
class User{
  User(this.userName,this.password);
  @JsonKey(name:"name")//给字段在通过json转化的时候提供了一个别名
  String userName;
  String password;
//以下是固定写法,在写其他实体类时记得替换里面的名字就可以了
  factory User.fromJson(Map<String, dynamic> json) => _$UserFromJson(json);
  Map<String, dynamic> toJson() => _$UserToJson(this);
}

在写完这些会发现有些地方还标红,不能正常使用,我们还需要编译一下自动生成没有的类和代码。我们需要在项目的根目录下运行:

flutter packages pub run build_runner build

或者:

flutter packages pub run build_runner watch

第一种方式是手动构建,如果我们创建了需要转换的实体后需要进行一次构建。第二种是启动观察器自动帮助我们构建,当发现有需要转换的实体后会自动编译帮助我们构建缺少的文件。
如果运行上面的命令出现了下面的错误提示还需要我们引入自动构建的类库:

Could not find package "build_runner". Did you forget to add a dependency?
pub finished with exit code 65

添加类库:

dependencies:
    build_runner: ^1.10.0

然后就可以正常使用了,实体类的创建看起来比较繁琐,其实已经有很多的第三方已经帮助我们做好了创建实体类的工具,比如:
1、在线生成工具:JsonToDart
2、以Android Studio为例可以安装FlutterJsonBeanFactory插件,安装成功后,我们选择菜单栏的File->New的时候就多出了一个JsonToDartBeanAction,输入类名和想要解析的Json就得到了想要的Bean。
准备工作做好了,在使用的时候我们看下如何使用,还是以上一个例子中的json为例:

    //序列化为User对象
    User user = User.fromJson(json.decode(jsonStr));
    //将对象转化为String类型
    var userStr = User("flutter","pwd11").toJson();

面对复杂的对象类型还需要好好看下如果做好合理的结构,本篇的基本Json解析就学到这了。


   转载规则


《Flutter的Json解析》 采用 知识共享署名 4.0 国际许可协议 进行许可。
 上一篇
iOS 查看项目编译时间并优化编译速度 iOS 查看项目编译时间并优化编译速度
源代码和三方库引入很多的时候,我们会发现编译的速度很慢。在了解了XCode的编译过程后,我们可以从以下角度来优化编译速度:A.查看编译时间方法: 1.关闭XCode 2.终端输入指令: defaults write com.apple.dt
2020-09-28
下一篇 
flutter appbar返回键 flutter appbar返回键
appBar: AppBar( backgroundColor: Color.fromRGBO(248,250,255,1), //设置appBar背景色 elevation: 0, // 立视度为0 title: Text(
2020-09-28
  目录