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

1 回复

更多关于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 类:

  1. 在项目根目录下创建一个 JSON 文件,例如 example.json

    {
      "name": "John Doe",
      "age": 30,
      "email": "john.doe@example.com",
      "address": {
        "street": "123 Main St",
        "city": "Anytown",
        "state": "CA",
        "zip": "12345"
      }
    }
    
  2. 运行以下命令生成 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);
}
回到顶部