如何为Unsplash API返回的嵌套JSON创建图片解析Model
解析Unsplash嵌套JSON的Dart Model实现
要提取图片、作者和标题信息,需针对JSON的嵌套结构创建对应Model类,以下是完整实现:
1. 定义嵌套Model类
先处理JSON中的嵌套对象:
PictureUrls:解析图片的多尺寸URLPictureUser:解析作者(用户)核心信息
2. 主Model类 PictureModel
包含你需要的核心字段:标题、作者信息、图片展示URL(选用常用的regular尺寸)
完整代码
// 处理图片URL的嵌套类 class PictureUrls { final String regular; PictureUrls({required this.regular}); factory PictureUrls.fromJson(Map<String, dynamic> json) { return PictureUrls( regular: json['regular'] ?? '', ); } } // 处理作者信息的嵌套类 class PictureUser { final String name; final String username; PictureUser({required this.name, required this.username}); factory PictureUser.fromJson(Map<String, dynamic> json) { return PictureUser( name: json['name'] ?? '', username: json['username'] ?? '', ); } } // 主图片Model类 class PictureModel { final String? title; // 优先取description,无值则用alt_description final PictureUser author; final PictureUrls imageUrls; PictureModel({ this.title, required this.author, required this.imageUrls, }); factory PictureModel.fromJson(Map<String, dynamic> json) { // 标题逻辑:优先用description,为空则fallback到alt_description String? title = json['description']; if (title == null || title.isEmpty) { title = json['alt_description']; } return PictureModel( title: title, author: PictureUser.fromJson(json['user']), imageUrls: PictureUrls.fromJson(json['urls']), ); } }
代码说明
- 空值处理:所有字段做了空值兜底,避免JSON字段为null时抛出异常
- 标题提取逻辑:Unsplash图片标题通常存于
description或alt_description,优先取description,为空则使用alt_description - 嵌套解析:通过
fromJson方法递归解析user和urls嵌套对象,将JSON转为强类型Dart对象
使用示例
拿到Unsplash API返回的图片列表JSON数组后,可这样解析:
List<PictureModel> parsePictures(List<dynamic> jsonList) { return jsonList.map((json) => PictureModel.fromJson(json)).toList(); }
内容的提问来源于stack exchange,提问作者userName
相关产品推荐
相关产品推荐

