dart:convert 3个月前

编程语言
392
dart:convert

库 dart:convert(API 参考)包含 JSON 和 UTF-8 的转换器,当然也支持创建其他的转换器。JSON 是表示结构化对象和集合的一种简单的文本格式。UTF-8 是一种可表示 Unicode 字符集中所有字符的通用的可变宽度编码。

库 dart:convert 在 web 应用和命令行应用中均可使用。要使用它,导入 dart:convert。

import 'dart:convert';

解码和编码 JSON

在 Dart 中,使用 jsonEncode() 来解码一个 JSON 编码的字符串:

// 说明: 在 JSON 字符串中,确保使用双引号 ("),
// 而不是单引号 (')。
// 这个字符串是 JSON, 而不是 Dart。
var jsonString = '''
  [
    {"score": 40},
    {"score": 80}
  ]
''';

var scores = jsonDecode(jsonString);
assert(scores is List);

var firstScore = scores[0];
assert(firstScore is Map);
assert(firstScore['score'] == 40);

使用 jsonEncode() 编码一个受支持的对象为一个 JSON 字符串:

var scores = [
  {'score': 40},
  {'score': 80},
  {'score': 100, 'overtime': true, 'special_guest': null}
];

var jsonText = jsonEncode(scores);
assert(jsonText ==
    '[{"score":40},{"score":80},'
    '{"score":100,"overtime":true,'
    '"special_guest":null}]');

只有类型为 int、double、String、bool、null、List 或 Map(只包含字符串的 key)是可以直接编码为 JSON 的。List 和 Map 对象被递归地编码。

你有两个选项来编码那些不被直接支持的对象。第一个是调用包含第二个参数的 encode()**:一个函数返回一个可被直接编码的对象。你的第二个选项是忽略第二个参数,这样编码器会调用对象的 **toJson() 方法。

要了解更多 JSON 相关的示例和链接,请参阅 JSON 支持

解码和编码 UTF-8 字符

在 Dart 中,使用 utf8.decode() 来解码 UTF8 编码的字节为一个 Dart 字符串:

List<int> utf8Bytes = [
  0xc3, 0x8e, 0xc3, 0xb1, 0xc5, 0xa3, 0xc3, 0xa9,
  0x72, 0xc3, 0xb1, 0xc3, 0xa5, 0xc5, 0xa3, 0xc3,
  0xae, 0xc3, 0xb6, 0xc3, 0xb1, 0xc3, 0xa5, 0xc4,
  0xbc, 0xc3, 0xae, 0xc5, 0xbe, 0xc3, 0xa5, 0xc5,
  0xa3, 0xc3, 0xae, 0xe1, 0xbb, 0x9d, 0xc3, 0xb1
];

var funnyWord = utf8.decode(utf8Bytes);

assert(funnyWord == 'Îñţérñåţîöñåļîžåţîờñ');

要转换一个 UTF-8 字符流为一个 Dart 字符串,指定 utf8.decoder 到 Stream 的 transform() 方法:

var lines = inputStream
    .transform(utf8.decoder)
    .transform(LineSplitter());
try {
  await for (var line in lines) {
    print('Got ${line.length} characters from stream');
  }
  print('file is now closed');
} catch (e) {
  print(e);
}

使用 utf8.encode() 来编码一个 Dart 字符串为一个 UTF-8 编码的字节列表:

List<int> encoded = utf8.encode('Îñţérñåţîöñåļîžåţîờñ');

assert(encoded.length == utf8Bytes.length);
for (int i = 0; i < encoded.length; i++) {
  assert(encoded[i] == utf8Bytes[i]);
}

其他功能

库 dart:convert 也包含 ASCII 和 ISO-8859-1 (Latin1) 的转换器。要了解详情,请参阅 dart:convert 库的 API 参考

image
EchoEcho官方
无论前方如何,请不要后悔与我相遇。
1377
发布数
439
关注者
2222609
累计阅读

热门教程文档

Djiango
17小节
Swift
54小节
Redis
14小节
Rust
84小节
React
18小节