第九十二回 在Flutter中解析JSON数据

文章目录

我们在上一章回中介绍了"对dio库进行封装"相关的内容,本章回中将介绍 如何在Flutter中解析JSON数据 .闲话休提,让我们一起Talk Flutter吧。

概念介绍

我们在前面章回中介绍了通过dio发起Http相关的网络操作,这些操作的结果都是JSON格式的数据。我们在本章回中将介绍如何解析这些JSON数据。如果有看官不知道什么是JSON数据的话点击这里查看我以前的博客。

在项目中,我们使用的是dart中的类对象,这些类是依据项目需求封装而成的,解析的目标就是把JSON格式的数据转换成使用类封装的数据。JOSN的本质是String类型的数据,它与map类型相匹配,因此解析的本质就是把String类型的数据 转换成map类型的数据。

解析方法

convert库

如果我们自动去解析JSON的话比较麻烦,dart官方提供了convert库来解析JSON数据,首先创建一个JsonDecoder对象,然后使用该对象的convert()方法就可以把JSON字符串转换成Map类型的对象,具体内容可以参考示例代码。

该库还可以反向操作:把封装类中的数据转换成JSON格式的数据。操作步骤如下:首先创建一个
JsonEncoder类型的对象,然后使用该对象的conver()方法注可以Map类型的数据转换成JSON字符串。具体内容可以参考示例代码。

插件工具

除了官方提供的方法外,也有一些第三方提供了解析工具,比如我之前推荐的三方工具:FlutterJsonBeanFactory,它可以通过插件的方式安装到AndroidStudio中,然后把JSON字符串复制到工具中,工具就会自动生成转换类(类名由自己指定),转换类提供了相关的方法给开发者使用,详细如下:

  • fromJson()方法: 把JSON字符串转换成Dart类对象;
  • toJson()方法: 把Dart类对象转换成JSON字符串;

这两个方法都是静态方法,可以通过类名来调用,详细的使用方法可以参考示例代码。该工具主打一个智能和自动,不过它也有缺点,会自动在lib目录下生成一个与类名相同的dart文件,该文件的名字不是驼峰命名法,而是使用了下划线命名方法,同时还会在lib目录下生成一个名叫generated的目录,该目录中包含了工具生成的代码,这些代码就是上面两个转换方法的源代码。这些自动生成的文件和项目中原来的文件不一样,给项目的管理带来了麻烦。

示例代码

dart 复制代码
///JSON字符串转换成Map类型的对象
const JsonDecoder decoder = JsonDecoder();

const String jsonString = '''
  {
    "data": [{"text": "foo", "value": 1 },
             {"text": "bar", "value": 2 }],
    "text": "Dart"
  }
''';

final Map<String, dynamic> object = decoder.convert(jsonString);

final item = object['data'][0];
print(item['text']); // foo
print(item['value']); // 1

print(object['text']); // Dart

///Map类型的数据转换成JSON字符串
const JsonEncoder encoder = JsonEncoder();
const data = {'text': 'foo', 'value': '2'};

final String jsonString = encoder.convert(data);
print(jsonString); // {"text":"foo","value":"2"}


///使用插件工具解析
CustomClassType.fromJson(jsonString);
CustomClassType.toJson(data);

以上示例代码来源于convet库官方给出的示例。更加详细的内容可以参考官方文档。使用工具解析时代码比较少,主要是复用了部分官方代码。我在这里就不演示程序的运行结果了,建议大家自己动手去实践。

经验总结

我们在本章回中介绍了两种解析JSON数据的方法,它们有各自的优缺点,详细总结如下:

  • convert库:官方提供的,比较权威,使用也很方便,对于简单的JSON字符串使用容易,对于复杂的JSON字符串使用繁杂,主要是需要手写多个map中的key。
  • 插件工具:三方提供,比较流行,集智能和自动化于一身,使用十分简单,缺点是生成了许多与项目不一致的文件,影响项目管理。

大家可以依据自身项目的需求,结合以上两种方法的优缺点选择其中一种解析方法。以上仅是个人经验,欢迎大家在评论区交流与讨论。

看官们,关于"在Flutter中解析JSON数据"相关的内容就介绍到这里,欢迎大家在评论区交流与讨论!

相关推荐
迷雾漫步者2 小时前
Flutter组件————FloatingActionButton
前端·flutter·dart
coder_pig6 小时前
📝小记:Ubuntu 部署 Jenkins 打包 Flutter APK
flutter·ubuntu·jenkins
捡芝麻丢西瓜8 小时前
flutter自学笔记5- dart 编码规范
flutter·dart
恋猫de小郭9 小时前
什么?Flutter 可能会被 SwiftUI/ArkUI 化?全新的 Flutter Roadmap
flutter·ios·swiftui
nbsaas-boot10 小时前
探索 JSON 数据在关系型数据库中的应用:MySQL 与 SQL Server 的对比
数据库·mysql·json
疯一样的码农12 小时前
Jackson 的@JsonRawValue
json
Web打印15 小时前
web打印插件 HttpPrinter 使用半年评测
javascript·json·firefox·jquery·html5
手心里的白日梦16 小时前
网络计算器的实现:TCP、守护进程、Json、序列化与反序列化
网络·tcp/ip·json
chenchihwen16 小时前
数据分析时的json to excel 转换的好用小工具
数据分析·json·excel
子燕若水18 小时前
简要解释JSON Schema
前端·html·json