转换JSON以使用字符串键和List <string>值进行映射

时间:2018-12-13 22:16:32

标签: dart

我正在尝试转换具有键字符串和值字符串数组的JSON。

据我了解,此应该可以工作:

import 'dart:convert';

void main() {
  var jsonString = '{"key": ["1", "2", "3"]}';
  var data = json.decode(jsonString) as Map;
  var result = data.cast<String, List<String>>();
  print(result);
}

但是我得到了type 'List<dynamic>' is not a subtype of type 'List<String>' in type cast的错误。

但是,有趣的是,以下内容可以正常工作:

import 'dart:convert';

void main() {
  var jsonString = '{"key": "value"}';
  var data = json.decode(jsonString) as Map;
  var result = data.cast<String, String>();
  print(result);
}

因此,我假设Dart 2引入的.cast<>方法不知道如何转换不是简单类型(如Stringint或{{ 1}}。

如何在不借助外部库的情况下将该对象转换为bool

1 个答案:

答案 0 :(得分:2)

  

因此,我假设Dart 2引入的.cast<>方法不知道如何转换不是简单类型(例如String,int或bool)的嵌套类型。

是的。它只是执行一个一级深度的浅转换。您可以自己进行嵌套转换,例如:

void main() {
  var jsonString = '{"key": ["1", "2", "3"]}';
  var data = json.decode(jsonString) as Map;

  var result = data.map((key, value) =>
      MapEntry<String, List<String>>(key, List<String>.from(value)));
  print(result.runtimeType);
}

正在呼叫Map.map()。有时Map.fromIterable()Map.fromIterables()更合适。集合类型有几种这样的方法可以在不同类型之间进行转换。