Flutter JSON解析插件smart_dart_json的使用
介绍
JSON 解析工具:
- 当解析JSON字段内不存在字段时,可返回默认值,不报错。
- 当解析字段类型不对等时,可返回默认值,不报错。
(例如:使用
json_serializable
解析,当服务端返回的字段类型为int
,我们将该字段声明为string
来解析时会报错,使用本库可正常解析成字符串类型。)
使用方式参考
以下是一个完整的示例代码,展示如何使用 smart_dart_json
插件解析 JSON 数据。
import 'package:smart_dart_json/smart_dart_json.dart';
void main() {
// 定义 JSON 字符串
const json =
'{"title": "示例title", "data": [{"name": "rex", "age": 10}]}';
// 初始化 SDartJson 对象
final sJson = SDartJson(json);
// 获取 JSON 中的字段并解析为字符串
final title = sJson['title'].stringValue;
// 获取 JSON 中的数组并解析为列表
final data = sJson['data'].arrayValue.map((e) => e.mapValue).toList();
// 模拟未定义的字段获取(方式一) 可返回默认值
final undefinedKey1 = sJson['undefinedKey1'].stringValue;
// 模拟未定义的字段获取(方式二) 返回 `null`
final undefinedKey2 = sJson['undefinedKey2'].string;
// 打印解析结果
print('title : $title');
print('data : $data');
print('undefinedKey1 : $undefinedKey1');
print('undefinedKey2 : $undefinedKey2');
}
打印结果
title : 示例title
data : [{name: rex, age: 10}]
undefinedKey1 :
undefinedKey2 : null
更多关于Flutter JSON解析插件smart_dart_json的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter JSON解析插件smart_dart_json的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
smart_dart_json
是一个用于 Flutter 的 JSON 解析插件,它可以帮助开发者更轻松地将 JSON 数据转换为 Dart 对象,或者将 Dart 对象转换为 JSON 数据。这个插件的主要特点是它能够自动生成 Dart 类,并且支持嵌套对象的解析。
安装 smart_dart_json
首先,你需要在 pubspec.yaml
文件中添加 smart_dart_json
依赖:
dependencies:
flutter:
sdk: flutter
smart_dart_json: ^1.0.0 # 请使用最新版本
然后运行 flutter pub get
来安装依赖。
使用 smart_dart_json
1. 生成 Dart 类
smart_dart_json
提供了一个命令行工具,可以根据 JSON 数据自动生成 Dart 类。你可以通过以下步骤来生成 Dart 类:
-
在项目根目录下创建一个 JSON 文件,例如
example.json
:{ "name": "John Doe", "age": 30, "email": "john.doe@example.com", "address": { "street": "123 Main St", "city": "Anytown", "state": "CA", "zip": "12345" } }
-
运行以下命令生成 Dart 类:
flutter pub run smart_dart_json:generate -i example.json -o lib/models
这将会在
lib/models
目录下生成一个 Dart 类文件,例如example.dart
:import 'package:smart_dart_json/smart_dart_json.dart'; class Example { final String name; final int age; final String email; final Address address; Example({ required this.name, required this.age, required this.email, required this.address, }); factory Example.fromJson(Map<String, dynamic> json) { return Example( name: json['name'], age: json['age'], email: json['email'], address: Address.fromJson(json['address']), ); } Map<String, dynamic> toJson() { return { 'name': name, 'age': age, 'email': email, 'address': address.toJson(), }; } } class Address { final String street; final String city; final String state; final String zip; Address({ required this.street, required this.city, required this.state, required this.zip, }); factory Address.fromJson(Map<String, dynamic> json) { return Address( street: json['street'], city: json['city'], state: json['state'], zip: json['zip'], ); } Map<String, dynamic> toJson() { return { 'street': street, 'city': city, 'state': state, 'zip': zip, }; } }
2. 解析 JSON 数据
你可以使用生成的 Dart 类来解析 JSON 数据:
import 'package:flutter/material.dart';
import 'package:smart_dart_json/smart_dart_json.dart';
import 'models/example.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Smart Dart JSON Example'),
),
body: Center(
child: FutureBuilder<String>(
future: _loadJson(),
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.done) {
if (snapshot.hasData) {
final jsonString = snapshot.data!;
final jsonMap = SmartDartJson.decode(jsonString);
final example = Example.fromJson(jsonMap);
return Text('Name: ${example.name}, Age: ${example.age}');
} else if (snapshot.hasError) {
return Text('Error: ${snapshot.error}');
}
}
return CircularProgressIndicator();
},
),
),
),
);
}
Future<String> _loadJson() async {
return '''
{
"name": "John Doe",
"age": 30,
"email": "john.doe@example.com",
"address": {
"street": "123 Main St",
"city": "Anytown",
"state": "CA",
"zip": "12345"
}
}
''';
}
}
3. 将 Dart 对象转换为 JSON 数据
你也可以将 Dart 对象转换回 JSON 数据:
void _convertToJson() {
final address = Address(
street: "123 Main St",
city: "Anytown",
state: "CA",
zip: "12345",
);
final example = Example(
name: "John Doe",
age: 30,
email: "john.doe@example.com",
address: address,
);
final jsonMap = example.toJson();
final jsonString = SmartDartJson.encode(jsonMap);
print(jsonString);
}