如何在Dart中将集合转换为JSON字符串?

10
我该如何在Dart中将集合转换为JSON字符串,就像我可以用Maps做的那样。文档上说我可以将map或数组传递给JSON.stringify()方法,但是在Dart中没有Array数据类型,而且传递集合会导致异常。
我有一个天真的解决办法,但我想知道是否有更好的方法:
    String s = '[';
    bool first=true;

    _set.forEach(function(item){
      if (first) {
        first = false;
      } else {
        s+=',';
      }
      s += JSON.stringify(item);
    });
    s +=']';
    print(s);
    return s;
2个回答

12
在Dart中,您可以使用JsonEncoderconvert方法从Object中获取JSON String。以下是一个示例:
import 'dart:convert';

void main() {
  final jsonEncoder = JsonEncoder();

  final collection1 = List.from([1, 2, 3]);
  print(jsonEncoder.convert(collection1)); // prints [1,2,3]

  final collection2 = List.from(['foo', 'bar', 'dart']);
  print(jsonEncoder.convert(collection2)); // prints ["foo","bar","dart"]

  final object = {'a': 1, 'b': 2};
  print(jsonEncoder.convert(object)); // prints {"a":1,"b":2}
}

5

以下是我使用的列表传递方法:

  • 在Dart VM中导入dart-sdk/lib/frog/server/dart_json.dart
  • 在Dartium中导入json:dart

使用以下代码:

void main() {
  var list = new List.from(["a","b","c"]);
  print(JSON.stringify(list));
}

打印出这个JSON片段:

["a","b","c"]

对于新的Set.from(...)无法工作,这是可以预料的,因为JSON只处理映射和列表。


你为什么觉得 Set 不起作用呢?List 和 Set 都是集合,将 Set 转换为 Array 或者通过 JSON 格式的字符串轻松转换为数组([item.toString, item.toString()])应该不难吧。 - Andreas Köberle
我之所以这样期望,是因为JSON没有Set的概念,转换为JSON将丢失Set的语义。当然,允许任何集合被字符串化成JSON很容易,但这将打破当前JSON和Dart之间的1:1映射。我想stringify()中缺少Set/Collection支持只是因为Dart还很年轻--如果你想加速这一进程,请放心地提交问题吧 :) - Philipp Reichart

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接