本文主要展示了在 Flutter 中转换 json 的最佳和最方便的方法。
Dart 内置了对解析 json 的支持。给定一个字符串,您可以使用该
dart:convert
库并将 Json(如果有效 json)转换为带有字符串键和动态对象的 Map。您可以直接解析 json 并使用映射,也可以将其解析并放入类型化对象中,以便您的数据具有更多结构并且更易于维护。
直接解析和使用
运行上面的代码会给你
_InternalLinkedHashMap<String, dynamic> : {name: Dane, alias: FilledStacks}
因此,您访问解析数据的方式是在返回的地图上使用键索引。让我们索引映射并获取名称和别名。
...
var name = parsedJson['name'];
var alias = parsedJson['alias'];
print('$name is $alias');
这将输出。
解析为对象
程序员通常的做法是将这些数据放入一个为您的数据建模的类中,而不是直接使用解析的数据。这通常通过 Dart 中的命名构造函数来完成。让我们将测试数据放入模型中。我们将首先以基本方式定义模型,然后进入命名构造函数。
class User {
String name;
String alias;
User(Map<String, dynamic> data) {
name = data['name'];
alias = data['alias'];
var jsonData = '{ "name" : "Dane", "alias" : "FilledStacks" }';
var parsedJson = json.decode(jsonData);
var user = User(parsedJson);
print('${user.name} is ${user.alias}');
这与原始访问相同,但更易于阅读、理解和维护。除了在构造函数中,也没有使用 String 键。这种方式很好,但只有一个构造函数限制了您,并且不会让您的模型开放以供扩展。您必须对其进行修改才能将任何其他功能加入其中。相反,通常的做法是让构造函数为您设置所有属性,并使用命名构造函数使用外部数据显式创建模型。
class User {
final String name;
final String alias;
User({this.name, this.alias});
User.fromJson(Map<String, dynamic> data)
: name = data['name'],
alias = data['alias'];
var jsonData = '{ "name" : "Dane", "alias" : "FilledStacks" }';
var parsedJson = json.decode(jsonData);
var user = User.fromJson(parsedJson);
print('${user.name} is ${user.alias}');
这更简洁、更明确,您的模型现在更少依赖传递给它的 Map。要考虑的一个问题是需要复杂模型的复杂 json。你真的想为一个简单的模型输入所有这些字段吗?我会这样做,因为我认为从长远来看它会更好,但幸运的是我们不必这样做。
json_to_dart
在开发中,服务端通常给我们返回的是JSON数据,我们需要将JSON数据转成我们的模型对象来使用。
在Flutter中,有几种JSON转模型的方式,我们还是以豆瓣为例,来进行一个演练;
【Flutter】JSON 模型转换 ( JSON 序列化工具 | JSON 手动序列化 | 根据 JSON 编写 Dart 模型类 | 在线自动根据 JSON 转换 Dart 类 )(二)
【Flutter】JSON 模型转换 ( JSON 序列化工具 | JSON 手动序列化 | 根据 JSON 编写 Dart 模型类 | 在线自动根据 JSON 转换 Dart 类 )(一)
趁着年假,今天在网上看到一篇不错的讲解在Flutter中解析复杂的JSON的文章,于是花了两个小时,翻译,研究,觉得对我收益挺大。分享给大家,欢迎大家点赞转发。,以下为译文,欢迎大家提出疑惑。
我不得不承认,在Flutter / Dart中使用JSON后,我错过了Android的*gson* 世界。当我开始在Flutter中使用API时,JSON解析确实使我非常费力。而且我敢肯定,这会让很多初学者感到困惑。
我们将使用dart:convert此博客的内置库。这是最基本的解析方法,仅在从Flutter开始或正在构建小型项目时才建议使用。尽管如此,了解Flutter中JSON解析的基础还是很重要的
在 Dart 生态系统中使用 packages(包) 实现代码的共享,比如一些 library 和工具。本文旨在介绍如何创建和发布一个 package。