一,代码:
import 'package:flutter/material.dart';
import 'dart:convert';
//定义解析后的类
class User {
final String name;
final int age;
User({required this.name, required this.age});
factory User.fromJson(Map<String, dynamic> json) {
return User(
name: json['name'],
age: json['age'],
);
}
//供打印对象使用
@override
String toString() {
return 'User{name: $name, age: $age}';
}
//供打印json使用
Map<String, dynamic> toJson() => {
'name': name,
'age': age,
};
}
class JsonPage extends StatefulWidget {
final Map arguments;
// 为title设置一个默认参数,这样的跳转该界面时可以不传值。
JsonPage({super.key, required this.arguments});
@override
State<JsonPage> createState() => _JsonPageState();
}
class _JsonPageState extends State<JsonPage> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
backgroundColor: Theme.of(context).colorScheme.primaryContainer,
title: Text(widget.arguments["title"]),
),
body: Center(
child: ElevatedButton(
onPressed: () async {
//解析字符串后打印出来
String jsonStr = '{"name": "John", "age": 25}';
Map<String, dynamic> jsonMap = json.decode(jsonStr);
User user = User.fromJson(jsonMap);
print("解析后的对象:");
print(user);
print(jsonEncode(user));
},
child: Row(
mainAxisSize: MainAxisSize.min, // 根据内容调整大小
children: <Widget>[
Icon(Icons.add), // 图标在左侧
SizedBox(width: 10), // 可选:添加一些间隔
Text("解析json"), // 文本在右侧
],
),
),
),
);
}
}
二,测试效果:
I/flutter ( 8612): 解析后的对象:
I/flutter ( 8612): User{name: John, age: 25}
I/flutter ( 8612): {"name":"John","age":25}