flutter鸿蒙版本数据处理常用总集

news/2024/10/15 5:30:25/

写在前面

本地访问json

1. 确保文件路径正确

示例目录

确保文件 one.json 实际上位于项目的 assets/json/ 目录中。项目结构应该类似于:

your_flutter_project/
│
├── assets/
│   └── json/
│       └── one.json
│
├── lib/
│   └── main.dart
│
└── pubspec.yaml

2. 更新pubspec.yaml

确保在pubspec.yaml中注册资产的路径。请检查以下内容:

确保pubspec.yaml文件的缩进是正确的(YAML文件对缩进非常敏感)。也要确保没有多余的空格和其他格式错误。        

flutter:assets:- assets/json/one.json

3. 正确加载JSON文件 

在现有的代码中,loadString是一个异步方法,因此应该使用asyncawait来加载文件。以下是更新后的代码:

import 'dart:convert';  // 添加这一行以便使用 json.decode
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';void main() {runApp(MyApp());
}class MyApp extends StatelessWidget {@overrideWidget build(BuildContext context) {return MaterialApp(title: 'Flutter Bottom Navigation',theme: ThemeData(primarySwatch: Colors.blue,),home: HomePage(),);}
}class HomePage extends StatefulWidget {@override_HomePageState createState() => _HomePageState();
}class _HomePageState extends State<HomePage> {String jsonResponse = '';@overridevoid initState() {super.initState();loadJsonData();}Future<void> loadJsonData() async {try {// 使用await加载JSON数据final String response = await rootBundle.loadString('assets/json/one.json');setState(() {jsonResponse = response;  // 将加载的JSON数据保存到变量中});print(jsonResponse);  // 输出JSON内容} catch (e) {print("Error loading JSON: $e");}}@overrideWidget build(BuildContext context) {return Scaffold(appBar: AppBar(title: Text('Flutter Bottom Navigation'),),body: Container(child: Text(jsonResponse.isNotEmpty ? jsonResponse : "Loading..."),),);}
}

JSON转Map

在 Flutter 中,可以使用 dart:convert 库中的 jsonDecode 方法将 JSON 字符串转换为 Map。

示例代码

import 'dart:convert';
void main() {// JSON 字符串String jsonString = '{"name": "John", "age": 30}';// JSON 转换为 MapMap<String, dynamic> userMap = jsonDecode(jsonString);// 打印结果print(userMap); // 输出: {name: John, age: 30}
}

在上面的示例中,我们定义了一个 JSON 字符串,并使用 jsonDecode 方法将其转换为 Map。输出结果是一个包含键值对的 Map。

Map转JSON

要将 Map 转换为 JSON 字符串,我们同样可以使用 dart:convert 库中的 jsonEncode 方法。

示例代码

import 'dart:convert';
void main() {// 定义一个 MapMap<String, dynamic> userMap = {'name': 'John','age': 30};// Map 转换为 JSONString jsonString = jsonEncode(userMap);//打印结果print(jsonString); // 输出: {"name":"John","age":30}
}

在此示例中,我们创建了一个 Map,然后使用 jsonEncode 将其转换为 JSON 字符串。输出是有效的 JSON 格式。

JSON转对象

要将 JSON 字符串转换为 Dart 对象,我们需要定义一个类,并在类中实现一个工厂构造函数,以便从 Map 创建对象。

示例代码

import 'dart:convert';
// 定义 User 类
class User {final String name;final int age;User({required this.name, required this.age});// 从 Map 创建 User 对象factory User.fromJson(Map<String, dynamic> json) {return User(name: json['name'],age: json['age'],);}
}
void main() {// JSON 字符串String jsonString = '{"name": "John", "age": 30}';// 将 JSON 字符串转换为 MapMap<String, dynamic> userMap = jsonDecode(jsonString);// 创建 User 对象User user = User.fromJson(userMap);// 打印结果print('Name: ${user.name}, Age: ${user.age}'); // 输出: Name: John, Age: 30
}

在这个例子中,我们定义了一个 User 类,并实现了 fromJson 工厂构造函数。我们首先将 JSON 字符串转换为 Map,然后使用 User.fromJson 方法创建 User 对象。

对象转JSON

要将 Dart 对象转换为 JSON 字符串,我们需要在类中实现一个方法,将对象的属性转换为 Map,然后使用 jsonEncode 方法进行编码。

示例代码

import 'dart:convert';
// 定义 User 类
class User {final String name;final int age;User({required this.name, required this.age});// 将 User 对象转换为 MapMap<String, dynamic> toJson() {return {'name': name,'age': age,};}
}
void main() {// 创建 User 对象User user = User(name: 'John', age: 30);// 将 User 对象转换为 JSON 字符串String jsonString = jsonEncode(user.toJson());// 打印结果print(jsonString); // 输出: {"name":"John","age":30}
}

在这个示例中,我们定义了 toJson 方法,它将 User 对象的属性转换为 Map。然后,我们使用 jsonEncode 将 Map 转换为 JSON 字符串。

写在最后

在 Flutter 中,处理 JSON、Map 和 Dart 对象之间的转换是非常重要的技能。通过使用 dart:convert 库中的 jsonDecodejsonEncode 方法,我们可以轻松实现 JSON 和 Map 之间的转换,以及 JSON 和 Dart 对象之间的转换。掌握这些基本操作将使你能够更高效地处理应用程序中的数据。

希望这篇博客能帮助你更好地理解 Flutter 中的 JSON 处理方法!


http://www.ppmy.cn/news/1539286.html

相关文章

vue3 element table 插槽外的数据更新,插槽内的数据未更新。

在使用element table组件时候&#xff0c;有时候需要对table内部的header插槽进行单独的列的数据操作&#xff0c;比如在列头增加一个筛选功能&#xff0c;对指定范围的值进行一个筛选&#xff0c;需要对input的值进行v-model的绑定&#xff0c;对绑定的值进行清空时候&#xf…

了解Android中的Activity生命周期

Android中的Activity生命周期详解 Android中的Activity是应用程序的基本组成单元&#xff0c;它为用户提供了一个可以交互的界面。Activity的生命周期是指从Activity被创建到销毁的整个过程&#xff0c;其中包含了多个状态转换和相应的系统回调方法。理解Activity的生命周期对…

系统架构设计师教程 第16章 16.1 嵌入式系统概述 笔记

16.1 嵌入式系统概述 嵌入式系统 (Embedded System) 是为了特定应用专门构建的计算机系统&#xff0c;其架构是随着嵌入式系统的逐步应用而发展形成。 16.1.1 嵌入式系统发展历程 五个阶段&#xff1a; 一&#xff1a;单片微型计算机 (SCM) 阶段&#xff0c;即单片机时代。…

使用 iperf3 工具测试TCP/UDP吞吐量

测试目标 - 测试网络的 TCP 和 UDP 吞吐量性能&#xff0c;包括不同并发连接数和目标带宽条件下的表现。 测试环境 - **测试工具**: iperf3 - **固定 IP 地址**: - 服务器 IP: 192.168.1.10 - 客户端 IP: 192.168.1.20 - **端口号**: 5201 测试准备 1. **安装 iperf3**&a…

【图论】Dijkstra

Dijkstra 前置知识 堆图论基础Bellman-Ford 思路 Dijkstra 算法是一种求正权图单源最短路的算法。 注意到BF最大的缺陷在于其对于一个点的松弛方式太暴力了。 注意到有正权这个条件。 那么我们发现&#xff0c;只要选取当前距离最小的点&#xff0c;该点不可能被松弛。 于是…

Spring-事务的其他属性

说到事务&#xff0c;就要说事务的隔离级别&#xff1a; 事务还有回滚&#xff0c;这里也有回滚的控制属性&#xff1a; rollbackFor可以指定对遇到什么异常回滚事务&#xff1a;默认是所有的运行时异常都要回滚&#xff0c;这个属性&#xff0c;知道就行&#xff0c;一般就取默…

C++刷怪笼(7)string类

目录 1.前言 2.正文 2.1标准库中的string类 2.1.1string类 2.1.2auto和范围for 2.1.3string类的常用接口说明 2.2string类的模拟实现 2.2.1经典的string类问题 2.2.2浅拷贝 2.2.3深拷贝 ​编辑 2.2.4写时拷贝 3.小结 1.前言 前面我们对C的封装这一大特性进行了详细…

DAY8 Final等

Final关键字 final修饰静态变量&#xff0c;这个变量今后被称为常量&#xff0c; 可以记住一个固定值&#xff0c;并且程序中不能修改了&#xff0c;通常这个值作为系统的配置信息。常量的名称&#xff0c;建议全部大写&#xff0c;多个单词用下划线连接。 public static final…