第九十二回 在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数据"相关的内容就介绍到这里,欢迎大家在评论区交流与讨论!

相关推荐
星释1 小时前
鸿蒙Flutter三方库适配指南-02.Flutter相关知识基础
flutter·华为·harmonyos
消失的旧时光-19435 小时前
TCP 流通信中的 EOFException 与 JSON 半包问题解析
android·json·tcp·数据
傅里叶9 小时前
Flutter项目使用 buf.build
flutter
Yeats_Liao10 小时前
Go Web 编程快速入门 08 - JSON API:编码、解码与内容协商
后端·golang·json
霍格沃兹_测试11 小时前
软件测试 | 测试开发 | app自动化测试之Appium 原理 与 JsonWP 协议分析
json
恋猫de小郭11 小时前
iOS 26 开始强制 UIScene ,你的 Flutter 插件准备好迁移支持了吗?
android·前端·flutter
yuanlaile11 小时前
Flutter开发HarmonyOS鸿蒙App商业项目实战已出炉
flutter·华为·harmonyos
CodeCaptain12 小时前
可直接落地的「Flutter 桥接鸿蒙 WebSocket」端到端实施方案
websocket·flutter·harmonyos
stringwu12 小时前
Flutter 中的 MVVM 架构实现指南
前端·flutter
消失的旧时光-19431 天前
Flutter 异步体系终章:FutureBuilder 与 StreamBuilder 架构优化指南
flutter·架构