在Flutter中,你可以使用Dart内置的dart:convert库来处理JSON数据,以及使用第三方库来进行JSON的序列化和反序列化。以下是一些基本的使用示例:

1. JSON 序列化和反序列化:
import 'dart:convert';

void main() {
  // JSON 字符串
  String jsonString = '{"name": "John", "age": 30, "city": "New York"}';

  // JSON 解码为 Map
  Map<String, dynamic> decodedMap = json.decode(jsonString);
  print('Decoded Map: $decodedMap');

  // JSON 编码 Map 为字符串
  String encodedJson = json.encode(decodedMap);
  print('Encoded JSON: $encodedJson');
}

2. 使用 Dart 内置的 dart:convert 库:
import 'dart:convert';

class Person {
  String name;
  int age;
  String city;

  Person(this.name, this.age, this.city);

  // 将对象转为 JSON Map
  Map<String, dynamic> toJson() {
    return {
      'name': name,
      'age': age,
      'city': city,
    };
  }

  // 从 JSON Map 构造对象
  factory Person.fromJson(Map<String, dynamic> json) {
    return Person(
      json['name'] ?? '',
      json['age'] ?? 0,
      json['city'] ?? '',
    );
  }
}

void main() {
  // 创建 Person 对象
  Person person = Person('John', 30, 'New York');

  // 将对象转为 JSON 字符串
  String jsonString = json.encode(person.toJson());
  print('Encoded JSON: $jsonString');

  // 从 JSON 字符串构造对象
  Map<String, dynamic> decodedMap = json.decode(jsonString);
  Person decodedPerson = Person.fromJson(decodedMap);
  print('Decoded Person: $decodedPerson');
}

3. 使用第三方库 json_serializable:

json_serializable是一个用于生成序列化和反序列化代码的强大库,它通过注解来简化 JSON 处理。

首先,在pubspec.yaml文件中添加依赖:
dependencies:
  json_annotation: ^4.3.0
  json_serializable: ^4.5.1

然后,运行以下命令来获取依赖项:
flutter pub get
import 'package:json_annotation/json_annotation.dart';

part 'person.g.dart';

@JsonSerializable()
class Person {
  String name;
  int age;
  String city;

  Person(this.name, this.age, this.city);

  // 使用注解自动生成 toJson 和 fromJson 方法
  factory Person.fromJson(Map<String, dynamic> json) => _$PersonFromJson(json);
  Map<String, dynamic> toJson() => _$PersonToJson(this);
}

为了生成 toJson 和 fromJson 方法,你需要运行以下命令:
flutter pub run build_runner build

这将自动生成一个名为 person.g.dart 的文件,其中包含自动生成的代码。

以上是一些在Flutter中处理JSON的基本示例。根据实际需求和项目规模,你可以选择不同的方法。


转载请注明出处:http://www.pingtaimeng.com/article/detail/9609/Flutter