0

我在许多地方都看到了一个用于对 Map 进行编码的示例,如下所示:

#import('dart:uri');
String encodeMap(Map data) {
    return Strings.join(data.getKeys().map((k) {
        return "${encodeUriComponent(k)}=${encodeUriComponent(data[k])}";
    }), "&");
}

在上面的示例中,我正在运行似乎是最新的 Dart 编辑器(版本 0.2.9_r 16323),对于 Dart M2,我相信它data.getKeys()已更改为data.keys()我已更改的内容。

但是,在编辑器中运行它时出现错误:

异常:NoSuchMethodError:找不到方法:'调用'"

我有两个问题:

  • 我想知道上面的代码是否仍应在 M2 中使用指示的更改(Map.keys())?
  • 我想知道上面的代码是否与以下代码有所不同: JSON.stringify(data);

欢迎任何其他指针。

TIA。

4

1 回答 1

0

要做的两个改变:

  • import语法发生了变化。
  • getKeys()方法变成了一个叫做keys.

一个工作版本:

import 'dart:uri';

String encodeMap(Map data) {
    return Strings.join(data.keys.map((k) {
        return "${encodeUriComponent(k)}=${encodeUriComponent(data[k])}";
    }), "&");
}

正如您在下面的代码片段中看到的那样,由此生成的与由String生成的encodeMap完全不同:JSON.stringify

main() {
  final map = {"a":"b", "c":"d"};
  assert(encodeMap(map) == "a=b&c=d");
  assert(JSON.stringify(map) == '{"a":"b","c":"d"}');
}
于 2013-01-04T20:22:17.203 回答