在Flutter中解析复杂的JSON(一篇顶十篇)
在Flutter中解析复杂的JSON通常涉及使用json_serializable
包和json_annotation
包。以下是一个简化的例子:
首先,定义你的模型类并使用json_serializable
生成JSON序列化代码。
// 引入必要的包
import 'package:json_annotation/json_annotation.dart';
// 定义模型类
@JsonSerializable()
class Article {
String title;
String author;
num score;
// 默认构造函数
Article({this.title, this.author, this.score});
// 工厂构造函数,用于从json创建实例
factory Article.fromJson(Map<String, dynamic> json) => _$ArticleFromJson(json);
// 将实例转换为json
Map<String, dynamic> toJson() => _$ArticleToJson(this);
}
// 为Article生成序列化方法
@JsonSerializable()
class TopTen {
List<Article> articles;
TopTen({this.articles});
factory TopTen.fromJson(Map<String, dynamic> json) => _$TopTenFromJson(json);
Map<String, dynamic> toJson() => _$TopTenToJson(this);
}
然后,运行build_runner
生成序列化代码:
flutter pub run build_runner build
最后,在你的代码中使用这些模型类来解析和创建JSON。
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:my_app/models.dart'; // 引入上述生成的序列化代码
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
// 假设这是你从网络获取的JSON字符串
String jsonString = '{"articles": [{"title": "Article 1", "author": "Author 1", "score": 100}, ...]}';
@override
Widget build(BuildContext context) {
final topTen = TopTen.fromJson(jsonDecode(jsonString));
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Top Articles'),
),
body: ListView.builder(
itemCount: topTen.articles.length,
itemBuilder: (context, index) {
final article = topTen.articles[index];
return ListTile(
title: Text(article.title),
subtitle: Text('${article.author} - ${article.score}'),
);
},
),
),
);
}
}
这个例子展示了如何定义模型类,使用json_serializable
生成序列化代码,并在Flutter应用中解析一个包含多篇文章的复杂JSON。
评论已关闭