Dart是一門強類型語言,但在處理網絡請求時,常常需要將JSON數據轉換成對象。JSON泛型解析是一種常用而有效的方法,讓我們來看看如何在Dart中實現。
首先,我們需要引入兩個庫:Dart的內置庫dart:convert和第三方庫json_annotation。json_annotation提供了注解@JsonSerializable,可以幫助我們自動生成JSON序列化和反序列化代碼。
import 'dart:convert'; import 'package:json_annotation/json_annotation.dart';
定義一個類,并在類定義上方加上@JsonSerializable()注解。如果類中有最終變量,需要使用required修飾。
@JsonSerializable() class Person { String name; int age; Person({required this.name, required this.age}); factory Person.fromJson(Mapjson) =>_$PersonFromJson(json); Map toJson() =>_$PersonToJson(this); }
接下來,我們需要使用build_runner運行自動生成的代碼。如果沒有安裝,請使用以下命令來安裝:
flutter pub global activate build_runner
在根目錄下創建一個build.yaml文件,指定生成代碼的位置。
targets: $default: builders: json_serializable: options: any_map: true explicit_to_json: true nullable: true use_wrappers: true create_factory: true generate_for: - lib/models/*.dart
在終端中運行以下命令:
flutter pub run build_runner build
現在,我們已經生成了JSON序列化和反序列化的代碼。
接著,我們需要使用Dart的內置庫dart:convert來執行JSON的解析。下面的代碼演示了如何將JSON字符串解析成一個列表:
ListparsePersons(String jsonString) { final parsed = jsonDecode(jsonString).cast
最后,我們就可以使用這個方法來解析JSON數據了。
final jsonString = '[{"name":"Tom","age":18},{"name":"Jerry","age":19}]'; final Listpersons = parsePersons(jsonString); persons.forEach((person) { print(person.name); });
使用JSON泛型解析,能夠更加方便地將JSON數據轉換成Dart對象。在Dart中使用@JsonSerializable注解,可以生成JSON的序列化和反序列化代碼,極大地減少了重復的工作量。
上一篇vue+url+原理
下一篇vue+node 配置