import ‘…/models/person.dart’;
// 读取 assets 文件夹中的 person.json 文件
Future _loadPersonJson() async {
return await rootBundle.loadString(‘assets/person.json’);
}
// 将 json 字符串解析为 Person 对象
Future decodePerson() async {
// 获取本地的 json 字符串
String personJson = await _loadPersonJson();
// 解析 json 字符串,返回的是 Map<String, dynamic> 类型
final jsonMap = json.decode(personJson);
print(‘jsonMap runType is ${jsonMap.runtimeType}’);
Person person = Person.fromJson(jsonMap);
print(
‘person name is ${person.name}, age is ${person.age}, height is ${person.height}’);
return person;
}
输入如下:
flutter: jsonMap runType is _InternalLinkedHashMap<String, dynamic>
flutter: person name is jack, age is 18, height is 175.0
可以看出 json.decode(personJson)
方法返回的类型为 _InternalLinkedHashMap<String, dynamic>
,意思就是这个 Map 的 key 为 String 类型,而 value 的类型为 dynamic 的,也就是动态的,就如 person.json
中,key 都是 String 类型的,但是 value 可能是 String 、int、double 等等类型。
包含数组的对象
定义一个 country.json 如下:
{
“name”: “China”,
“cities”: [
“Beijing”,
“Shanghai”
]
}
实体类如下:
class Country {
String name;
List cities;
Country({this.name, this.cities});
factory Country.fromJson(Map<String, dynamic> json) {
return Country(name: json[‘name’], cities: json[‘cities’]);
}
}
Service 类如下:
import ‘dart:async’;
import ‘package:flutter/services.da