I could not find an example of how to read in a list of JSON objects from a file using the Flutter packages: json_annotation and json_serializable. After a while I figured the way to do it. This post shows an example of automating JSON de-serialization of a JSON file that looks like the following:
[ { "code": "NED", "fullname": "North East Down (local)", }, { "code": "ECEF", "fullname": "Earth Centered Earth Fixed (ECEF)", }, { "code": "LLA", "fullname": "WGS 84", } ]
Install the Flutter packages Json_serializable and Json_annotation
In a Terminal, type in the following:
$ cd /path/to/the/root/of/flutter/project/
$ flutter pub add json_annotation
$ flutter pub add json_serializable
Code the model class dart file
- In a text editor, create the model class dart file, e.g. cs_model.dart.
- Type in the following:
import 'package:json_annotation/json_annotation.dart'; // Part file to be auto generated part 'cs_model.g.dart'; @JsonSerializable() class APICoordSysQuery { // Factory method to load in the list of JSON objects factory APICoordSysQuery.fromJson(List<dynamic> parsedJson){ List<APICoordSys> csList = List<APICoordSys>.empty(); csList = parsedJson.map ( (e) => APICoordSys.fromJson(e)).toList(); return APICoordSysQuery( csList: csList, ); } // To be auto generated by the Json_serializable package Map<String, dynamic> toJson() => _$APICoordSysQueryToJson(this); @JsonKey(name: 'csList') List<APICoordSys> csList; APICoordSysQuery({ required this.csList }); } @JsonSerializable() class APICoordSys { // Factory method to deserialize a JSON object to be auto generated factory APICoordSys.fromJson(Map<String, dynamic> json) => _$APICoordSysFromJson(json); // Factory method to serialize a JSON Object to be auto generated Map<String, dynamic> toJson() => _$APICoordSysToJson(this); @JsonKey(name: 'code') String code; @JsonKey(name: 'fullname') String fullName; // Constructor APICoordSys({ required this.code, required this.fullName }); }
Generate the .part file
- In a Terminal, run the following:
$ cd /path/to/flutter/root/project/
$ dart run build_runner build
Processing messages appear and the cs_model.part.g.dart file is generated.
Now you should be able to load in a list of JSON objects in Flutter.