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

ops/2024/10/15 9:12:31/

写在前面

本地访问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/ops/125865.html

相关文章

【React】使用脚手架或Vite包两种方式创建react项目

1.使用脚手架搭建React项目&#xff1a; 在终端窗口运行如下命令即可&#xff1a; npx create-react-app react-basic(创建的文件目录) npx&#xff1a;Node.js工具命令&#xff0c;用于查找并执行后续的包命令。 2.使用Vite包创建React项目&#xff1a; 在终端窗口运行如…

Linux中device_create、device_add、device_register的区别

目录 前言&#xff1a; 一、源码分析 1、device_create() 2、device_register 3、device_add 二、device_create()、device_register()、device_add()使用中的区别 1、device_create() 2、device_register() 3、device_add() 前言&#xff1a; Linux设备驱动开发中&…

uboot基础 -- 启动Linux kernel镜像之 booti 命令的用法

U-Boot booti 命令的作用与用法 booti 命令是 U-Boot 中用于引导 Linux 内核的命令&#xff0c;主要用于启动 ARM64 (AArch64) 平台上的内核映像。在现代嵌入式系统中&#xff0c;booti 通常用于启动设备上的 Linux 内核。 1. 基本概念 booti 命令用于引导内核时加载一个二进…

【VUE】Vue的diff算法和React的diff算法

React和Vue都使用了虚拟DOM来进行高效的页面更新&#xff0c;但它们在实现细节上有一些差异。下面是React和Vue的diff算法的异同点&#xff1a; 异同点&#xff1a; 目标&#xff1a;React和Vue的diff算法的目标都是尽量减少DOM操作的次数&#xff0c;提高页面更新的性能。虚…

初试PostgreSQL数据库

文章目录 一、PostgreSQL数据库概述1.1 PostgreSQL的历史1.2 PostgreSQL安装1.3 安装PostgreSQL二、PostgreSQL起步2.1 连接数据库2.1.1 SQL Shell2.1.2 执行SQL语句2.2 pgAdmin 42.2.1 打开pgAdmin 42.2.2 查找数据库2.2.3 打开查询工具2.2.4 执行SQL语句三、实战小结文章目录…

深入理解链表(SList)操作

目录&#xff1a; 一、 链表介绍1.1、 为什么引入链表1.2、 链表的概念及结构1.3、 链表的分类 二、 无头单向非[循环链表](https://so.csdn.net/so/search?q循环链表&spm1001.2101.3001.7020)的实现2.1、 [单链表](https://so.csdn.net/so/search?q单链表&spm1001.2…

SDV 峰会聚焦:下一代软件定义汽车的关键开源技术

10 月 17 - 18 日&#xff0c;由 GOSIM 开源创新汇主办、CSDN 承办的 GOSIM CHINA 2024 将在北京盛大启幕。作为 GOSIM 开源年度大会的第三届盛会&#xff0c;本次活动邀请了 60 多位国际开源专家&#xff0c;汇聚了来自全球百余家顶尖科技企业、知名高校及开源社区的技术大咖、…

docker环境redis启动失败

现象&#xff1a; 查看日志错误为 Bad file format reading the append only file: make a backup of your AOF file, then use ./redis-check-aof --fix <filename> 经查询为aof文件损坏导致&#xff0c;修复aof即可 解决方法&#xff1a; 1.查看执行的docker命令&…