Flutter JSON解析插件gson的使用
Flutter JSON解析插件gson的使用
安装
在你的 pubspec.yaml
文件中添加以下依赖:
dependencies:
gson: ^0.1.4
然后在 Dart 文件中导入该包:
import 'package:gson/gson.dart';
使用
解码和编码
要解码 JSON 字符串,可以使用 gson.decode
方法。要编码对象为 JSON 字符串,可以使用 gson.encode
方法。
示例代码
以下是一个完整的示例代码,展示了如何使用 gson
包进行 JSON 的解析与生成:
import 'dart:convert';
import 'package:gson/gson.dart';
void main() {
// 基本编码示例
var encodedJson = gson.encode({
"a": "a",
"b": ["hello", "world"],
"c": 1,
"d": false,
"e": Byte(26)
});
print(encodedJson); // 输出: {"a":"a","b":["hello","world"],"c":1,"d":false,"e":26b}
// 如果你想在输出中得到一个 double 类型,你需要插入 Double 类
var doubleEncoded = gson.encode(Double(1.0));
print(doubleEncoded); // 输出: 1.0d
// 因为 Dart 没有不同类型的数字(只有 num, int 和 double),API 提供了这些类型。
// 所以如果你想在输出中得到一个 double 类型,你需要插入 Double 类
var decodedDouble = gson.decode("1.0d").value;
print(decodedDouble); // 输出: 1.0
// 因为在 gson 中布尔值被显示为字节类型,所以布尔值存在于 Byte 类型中
var boolEncoded = gson.encode(true);
print(boolEncoded); // 输出: 1b
var decodedBool = gson.decode("1b");
print(decodedBool.value); // 输出: 1
print(decodedBool.boolValue); // 输出: true (0b 将输出 false)
// 使用 beautify 参数使输出更美观
var beautifiedJson = gson.encode({
"a": "a",
"b": ["hello", "world"],
"c": 1,
"d": false,
"e": Byte(26)
}, beautify: true);
print(beautifiedJson);
// 输出:
// {
// a: "a",
// b: [
// "hello",
// "world"
// ],
// c: 1,
// d: false,
// e: 26b
// }
// 使用 indent 参数控制缩进的数量
var indentedJson = gson.encode({
"a": "a",
"b": ["hello", "world"],
"c": 1,
"d": false,
"e": Byte(26)
}, beautify: true, indent: 4);
print(indentedJson);
// 输出:
// {
// a: "a",
// b: [
// "hello",
// "world"
// ],
// c: 1,
// d: false,
// e: 26b
// }
}
更多关于Flutter JSON解析插件gson的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter JSON解析插件gson的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter中,处理JSON数据时,你可以使用dart:convert
库来进行JSON的编码和解码。虽然Flutter没有直接提供类似于Android中的Gson库,但你可以使用一些第三方库来简化JSON的解析过程,例如json_serializable
和built_value
。
1. 使用 dart:convert
进行手动解析
首先,你可以使用Flutter内置的dart:convert
库来手动解析JSON数据。
import 'dart:convert';
void main() {
String jsonString = '''
{
"name": "John Doe",
"age": 30,
"email": "john.doe@example.com"
}
''';
Map<String, dynamic> userMap = jsonDecode(jsonString);
print('Name: ${userMap['name']}');
print('Age: ${userMap['age']}');
print('Email: ${userMap['email']}');
}
2. 使用 json_serializable
自动生成解析代码
json_serializable
是一个流行的第三方库,它可以自动生成JSON序列化和反序列化的代码。
安装依赖
在pubspec.yaml
中添加以下依赖:
dependencies:
flutter:
sdk: flutter
json_annotation: ^4.8.0
dev_dependencies:
build_runner: ^2.3.3
json_serializable: ^6.6.0
创建模型类
创建一个模型类,并使用@JsonSerializable
注解。
import 'package:json_annotation/json_annotation.dart';
part 'user.g.dart';
@JsonSerializable()
class User {
final String name;
final int age;
final String email;
User({required this.name, required this.age, required this.email});
factory User.fromJson(Map<String, dynamic> json) => _$UserFromJson(json);
Map<String, dynamic> toJson() => _$UserToJson(this);
}
生成代码
运行以下命令生成序列化代码:
flutter pub run build_runner build
这将生成user.g.dart
文件,其中包含_$UserFromJson
和_$UserToJson
方法。
使用生成的代码
import 'dart:convert';
import 'user.dart';
void main() {
String jsonString = '''
{
"name": "John Doe",
"age": 30,
"email": "john.doe@example.com"
}
''';
Map<String, dynamic> userMap = jsonDecode(jsonString);
User user = User.fromJson(userMap);
print('Name: ${user.name}');
print('Age: ${user.age}');
print('Email: ${user.email}');
}
3. 使用 built_value
进行更复杂的序列化
built_value
是另一个强大的库,适用于更复杂的序列化需求,尤其是当你需要不可变对象时。
安装依赖
在pubspec.yaml
中添加以下依赖:
dependencies:
flutter:
sdk: flutter
built_value: ^8.7.0
dev_dependencies:
build_runner: ^2.3.3
built_value_generator: ^8.7.0
创建模型类
import 'package:built_value/built_value.dart';
import 'package:built_value/serializer.dart';
part 'user.g.dart';
abstract class User implements Built<User, UserBuilder> {
String get name;
int get age;
String get email;
User._();
factory User([void Function(UserBuilder) updates]) = _$User;
static Serializer<User> get serializer => _$userSerializer;
}
生成代码
运行以下命令生成序列化代码:
flutter pub run build_runner build
使用生成的代码
import 'dart:convert';
import 'user.dart';
import 'serializers.dart';
void main() {
String jsonString = '''
{
"name": "John Doe",
"age": 30,
"email": "john.doe@example.com"
}
''';
User user = serializers.deserializeWith(
User.serializer, jsonDecode(jsonString));
print('Name: ${user.name}');
print('Age: ${user.age}');
print('Email: ${user.email}');
}