我正在尝试转换具有键字符串和值字符串数组的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<>
方法不知道如何转换不是简单类型(如String
,int
或{{ 1}}。
如何在不借助外部库的情况下将该对象转换为bool
?
答案 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()
更合适。集合类型有几种这样的方法可以在不同类型之间进行转换。