我不明白如何解析json以列出列表或flutter中的任何类型
https://jsonplaceholder.typicode.com/photos <=这是我使用的json示例
并且该信息被[],{}
包围final parsed = json.decode(responseBody).cast<Map<String, dynamic>>();
List<Photo> simple =
parsed.map<Photo>((json) => Photo.fromJson(json)).toList();
我希望json.decode.cast()
工作时,解析后包含每个对象,但是
当我打印解析后,它只是一个像[~~~]的数组
为什么他们在Map <>中使用强制转换方法?
答案 0 :(得分:0)
jsonDecode已经为您提供了列表对象,因此您可以优化代码。
在您的情况下,不要使用
final parsed = json.decode(responseBody).cast<Map<String, dynamic>>();
List<Photo> simple =
parsed.map<Photo>((json) => Photo.fromJson(json)).toList();
尝试使用
final List<Photo> simple = jsonDecode(responseBody).map((item) => Photo(title: item.title)).toList()
避免使用fromJson函数
答案 1 :(得分:0)
我不明白如何解析json以列出列表或flutter中的任何类型
此代码可以帮助您了解其工作原理。
import 'dart:convert';
import 'json_objects.dart';
import 'package:http/http.dart' as _http;
Future<void> main() async {
final url = 'https://jsonplaceholder.typicode.com/photos';
final response = await _http.get(url);
if (response.statusCode == 200) {
final json =
(jsonDecode(response.body) as List).cast<Map<String, dynamic>>();
final photos = json.map((e) => Photo.fromJson(e)).cast<Photo>();
for (final photo in photos) {
print("Id: ${photo.id}");
print("Id: ${photo.title}");
}
}
}
结果。
Id: 1 Id: accusamus beatae ad facilis cum similique qui sunt Id: 2 Id: reprehenderit est deserunt velit ipsam Id: 3 Id: officia porro iure quia iusto qui ipsa ut modi Id: 4 Id: culpa odio esse rerum omnis laboriosam voluptate repudiandae Id: 5 Id: natus nisi omnis corporis facere molestiae rerum in Id: 6 Id: accusamus ea aliquid et amet sequi nemo Id: 7 Id: officia delectus consequatur vero aut veniam explicabo molestias Id: 8 Id: aut porro officiis laborum odit ea laudantium corporis Id: 9 Id: qui eius qui autem sed Id: 10 Id: beatae et provident et ut vel ... ...
使用的JSON数据模型。
class Photo {
final int albumId;
final int id;
final String thumbnailUrl;
final String title;
final String url;
Photo({this.albumId, this.id, this.thumbnailUrl, this.title, this.url});
factory Photo.fromJson(Map<String, dynamic> json) {
return Photo(
albumId: json['albumId'] as int,
id: json['id'] as int,
thumbnailUrl: json['thumbnailUrl'] as String,
title: json['title'] as String,
url: json['url'] as String,
);
}
Map<String, dynamic> toJson() {
return {
'albumId': albumId,
'id': id,
'thumbnailUrl': thumbnailUrl,
'title': title,
'url': url,
};
}
}
/*
Photo:
"albumId": int
"id": int
"title": String
"url": String
"thumbnailUrl": String
*/
答案 2 :(得分:0)
您不需要转换数组,因为它们已经是对象列表。
您可以使用以下方法获取照片对象的列表:
Future<String> getPhotos() async {
var response = await http.get(
'https://jsonplaceholder.typicode.com/photos');
if (response.statusCode == 200) {
var parsed = json.decode(response.body);
List<Photo> simple = parsed.map<Photo>((json) => Photo.fromJson(json)).toList();
print(simple);
}
}
这是所使用的照相课。
class Photo {
final int albumId;
final int id;
final String title;
final String url;
final String thumbnailUrl;
Photo(
{this.albumId, this.id, this.title, this.url, this.thumbnailUrl});
factory Photo.fromJson(Map<dynamic, dynamic> json) {
return Photo(albumId: json['albumId'],
id: json['id'],
title: json['title'],
url: json['url'],
thumbnailUrl: json['thumbnailUrl'],
);
}
}