【问题标题】:How do parse json to object and use in another class如何将json解析为对象并在另一个类中使用
【发布时间】:2020-07-12 10:41:15
【问题描述】:

如何将 JSON 解析为对象并在另一个类中使用? 例如,我收到响应并创建类。

signIn(String userName, pass) async {

 final String serverKey = '##############';
 final String url = 'https://example.com';

 Map data = {
 'server_key': serverKey,
 'username': userName,
 'password': pass };
 var jsonResponse;
 var response = await http.post(url, body: data);
 if (response.statusCode == 200) {
 jsonResponse = json.decode(response.body);
 var res = jsonResponse;
 print(res);
 list = res.map<Token>((json) => Token.fromJson(json)).toList();
 if (jsonResponse != null) {
 setState(() {
  _isLoading = false;
 });
}
} else {
 setState(() {
 _isLoading = false;
 });
  print(response.body);
 }

创建类

class Token {
  String timezone;
  String access;

Token({this.timezone, this.access});
factory Token.fromJson(Map<String, dynamic> json) {
 return Token(timezone: json["timezone"], access: json["access_token"]);
  }
}

以及如何将另一个dart文件中的var访问和时区使用到项目中?

【问题讨论】:

  • 你试过一些代码吗?你看过官方文档了吗

标签: java flutter flutter-web


【解决方案1】:

嗨,kakajan,我在 dart 文件中使用数据的方式是 . 第1步:创建一个Global.dart(不要在里面声明一个类),在这里声明变量就是

var access;
var timezone;

第 2 步:将此 Global.dart 导入您具有登录功能的文件中 第 3 步:将此变量分配给您从服务器的 API 获得的数据 步骤 4 : 数据分配后请使用打印语句确认 第 5 步:转到您想要数据的另一个 dart 文件并导入 Global.dart 第 6 步:您可以轻松地在那里使用这些变量

请注意,这只会持续到应用程序关闭后的一个应用程序实例,除非您首先调用登录函数,否则它们将没有任何价值:) 希望我能帮上忙:)

【讨论】:

  • 你能举个例子吗?
【解决方案2】:

使用 build_runner 包生成您的 json 解析方法,并用于将 json 转换为对象,反之亦然。

这是一个例子:

import 'package:json_annotation/json_annotation.dart';

part 'user_model.g.dart';

@JsonSerializable()
class User {
  final String userName;
  final String authKey;
  final String role;

  User({this.userName, this.authKey, this.role});

  factory User.fromJson(Map<String, dynamic> json) => _$UserFromJson(json);
  Map<String, dynamic> toJson() => _$UserToJson(this);
}

user_model.g.dart 文件将在您运行 flutter pub run build_runner build 时创建。更多用法请查看包页面https://pub.dev/packages/build_runner#built-in-commands

将 Json 转换为用户对象

Future<User> _getToken() async {
    final data = await FlutterSession().get("user"); //this could be also from API call
    if (data != null) {
      User user = User.fromJson(data);
      if (user.userName == null)
        return new User(authKey: null);
      else
        return User.fromJson(data);
    } else {
      return new User(authKey: null);
    }
  }

鉴于您的 pubspec.yaml

中包含所有这些包的条件
json_to_model: ^1.4.0
build_runner: ^1.12.2
json_serializable: ^3.2.5

注意:版本可能不同,需要从https://pub.dev/packages获取

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-03
    • 1970-01-01
    • 1970-01-01
    • 2016-08-03
    • 2017-09-13
    • 2017-07-28
    • 1970-01-01
    • 2015-06-10
    相关资源
    最近更新 更多