Flutter 中转换 json 的最佳和最方便的方法

本文涉及的产品
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
简介: 本文主要展示了在 Flutter 中转换 json 的最佳和最方便的方法。Dart 内置了对解析 json 的支持。给定一个字符串,您可以使用该dart:convert库并将 Json(如果有效 json)转换为带有字符串键和动态对象的 Map。您可以直接解析 json 并使用映射,也可以将其解析并放入类型化对象中,以便您的数据具有更多结构并且更易于维护。

本文主要展示了在 Flutter 中转换 json 的最佳和最方便的方法。

Dart 内置了对解析 json 的支持。给定一个字符串,您可以使用该dart:convert库并将 Json(如果有效 json)转换为带有字符串键和动态对象的 Map。您可以直接解析 json 并使用映射,也可以将其解析并放入类型化对象中,以便您的数据具有更多结构并且更易于维护。

直接解析和使用

var jsonData = '{ "name" : "Dane", "alias" : "FilledStacks"  }';
var parsedJson = json.decode(jsonData);
print('${parsedJson.runtimeType} : $parsedJson');

运行上面的代码会给你

_InternalLinkedHashMap<String, dynamic> : {name: Dane, alias: FilledStacks}

因此,您访问解析数据的方式是在返回的地图上使用键索引。让我们索引映射并获取名称和别名。

...
var name = parsedJson['name'];
var alias = parsedJson['alias'];
print('$name is $alias');

这将输出。

Dane is FilledStacks

解析为对象

程序员通常的做法是将这些数据放入一个为您的数据建模的类中,而不是直接使用解析的数据。这通常通过 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



相关文章
|
7月前
|
JSON JavaScript 前端开发
JavaScript原生代码处理JSON的一些高频次方法合集
JavaScript原生代码处理JSON的一些高频次方法合集
|
25天前
|
开发框架 前端开发 定位技术
Flutter框架中的插件市场及开源资源的利用方法。内容涵盖插件市场的扩展功能、时间节省与质量保证
本文深入探讨了Flutter框架中的插件市场及开源资源的利用方法。内容涵盖插件市场的扩展功能、时间节省与质量保证,常见插件市场的介绍,选择合适插件的策略,以及开源资源的利用价值与注意事项。通过案例分析和对社区影响的讨论,展示了这些资源如何促进开发效率和技术进步,并展望了未来的发展趋势。
32 11
|
24天前
|
缓存 前端开发 数据安全/隐私保护
Flutter 框架提供了丰富的机制和方法来优化键盘处理和输入框体验
在移动应用开发中,Flutter 框架提供了丰富的机制和方法来优化键盘处理和输入框体验。本文深入探讨了键盘的显示与隐藏、输入框的焦点管理、键盘类型的适配、输入框高度自适应、键盘遮挡问题处理及性能优化等关键技术,结合实例分析,旨在帮助开发者提升应用的用户体验。
39 6
|
4月前
|
JSON JavaScript 前端开发
JavaScript实现字符串转json对象的方法
JavaScript实现字符串转json对象的方法
|
1月前
|
JSON JavaScript 前端开发
|
1月前
|
JSON 人工智能 算法
探索LLM推理全阶段的JSON格式输出限制方法
文章详细讨论了如何确保大型语言模型(LLMs)输出结构化的JSON格式,这对于提高数据处理的自动化程度和系统的互操作性至关重要。
|
6月前
|
存储 开发框架 JavaScript
深入探讨Flutter中动态UI构建的原理、方法以及数据驱动视图的实现技巧
【6月更文挑战第11天】Flutter是高效的跨平台移动开发框架,以其热重载、高性能渲染和丰富组件库著称。本文探讨了Flutter中动态UI构建原理与数据驱动视图的实现。动态UI基于Widget树模型,状态变化触发UI更新。状态管理是关键,Flutter提供StatefulWidget、Provider、Redux等方式。使用ListView等可滚动组件和StreamBuilder等流式组件实现数据驱动视图的自动更新。响应式布局确保UI在不同设备上的适应性。Flutter为开发者构建动态、用户友好的界面提供了强大支持。
113 2
|
6月前
|
JSON JavaScript IDE
JSON 数据格式化方法
JSON 数据格式化方法
131 3
|
3月前
|
XML JSON JavaScript
JSON对象的stringify()和parse()方法使用
本文阐述了JSON对象的`stringify()`和`parse()`方法的用法,包括如何将JavaScript对象转换为JSON字符串,以及如何将JSON字符串解析回JavaScript对象,并讨论了转换过程中需要注意的事项。
JSON对象的stringify()和parse()方法使用
|
2月前
|
开发者
flutter:总结所有需要用到的方法与实战 (十六)
本文介绍了Flutter中路由和顶部导航的使用方法,包括简单路由、命名路由、返回及返回根路由的实现。同时,详细讲解了顶部导航的定义与属性设置,并通过实战案例展示了复杂布局、新闻列表和页面制作的思路。最后,还提供了父类向子类传递参数的方法以及如何添加依赖库。