json - 如何在 Flutter 中解码 JSON?

如何在 Flutter 中解码 JSON?

问题很简单,但答案并不简单,至少对我而言。

我有一个使用大量 JSON 字符串的项目。基本上,应用程序和服务器之间的整个通信都是通过 JSON 进行的。

我一直在使用 JSON.decode(json_string) 来处理它,但是今天我更新了 Flutter 核心(0.5.8-pre.178)并且 JSON.decode 不再可用.

我去了Flutter Docs寻求帮助,但它仍然说要使用 JSON.decode。

那么,从现在开始如何在 Flutter 中解码 JSON?

最佳答案

你需要导入 dart:convert:

import 'dart:convert';

内联示例

String rawJson = '{"name":"Mary","age":30}';

Map<String, dynamic> map = jsonDecode(rawJson); // import 'dart:convert';

String name = map['name'];
int age = map['age'];

Person person = Person(name, age);

注意:当我在 VS Code 中为服务器端 Dart 执行此操作时,我必须指定类型:

Map<String, dynamic> map = jsonDecode(rawJson) as Map<String, dynamic>;

模型类示例

模型类包含 map 转换逻辑:

class Person {
  String name;
  int age;
  Person(this.name, this.age);

  // named constructor
  Person.fromJson(Map<String, dynamic> json)
      : name = json['name'],
        age = json['age'];

  // method
  Map<String, dynamic> toJson() {
    return {
      'name': name,
      'age': age,
    };
  }
 
}

JSON 转换是这样完成的:

String rawJson = '{"name":"Mary","age":30}';
Map<String, dynamic> map = jsonDecode(rawJson);
Person person = Person.fromJson(map);

查看我的完整答案 here .

生成序列化代码

写序列化代码容易出错,所以一般推荐使用json_serializable由 Dart 团队打包。但是,您可以了解不同方法的优缺点 here .

如果您想要更多选项,还可以查看 built_value包。

另见

  • Work with JSON in Flutter - Part 1: dart:convert
  • Work with JSON in Flutter - Part 2: json_serializable
  • Some Options for Deserializing JSON with Flutter

https://stackoverflow.com/questions/51601519/

相关文章:

ios - 使用 Flutter 在 Windows 环境下开发 iOS 设备

java - Flutter 应用程序体积太大

dart - 如何在 Flutter 中更改键盘上的文本输入操作按钮(返回/回车键)?

dart - 如何清除 Flutter 的图片缓存?

dart - 如何使用 Flutter 在 iOS 和 Android 上共享图像?

flutter - 如何修复 HttpException : Connection closed b

flutter - 未找到 Material 小部件

function - 如何在 Dart/Flutter 中使用另一个文件的函数?

android - 如何构建符合 Google Play 64 位要求的应用程序?

dart - 如何在 flutter 中使用 url 编码的主体发出 HTTP POST 请求?