dart - 使用字符串键和列表将 JSON 转换为映射价值观
问题描述
我正在尝试转换具有键的字符串和值的字符串数组的 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);
}
所以,我假设.cast<>
Dart 2 引入的方法不知道如何转换不是简单类型的嵌套类型,如String
,int
或bool
.
我如何在Map<String, List<String>>
不求助于外部库的情况下将此对象转换为 a ?
解决方案
因此,我假设
.cast<>
Dart 2 引入的方法不知道如何转换不是简单类型(如 String、int 或 bool)的嵌套类型。
That's correct. It just does a one-level-deep shallow conversion. You can do the nested conversion yourself like:
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);
}
This is calling Map.map()
. Sometimes Map.fromIterable()
or Map.fromIterables()
is a better fit. The collection types have a handful of methods like this to convert between different types.
推荐阅读
- spring-boot - 使用 @Aspect 的 Spring AOP 实现不适用于我的项目
- .htaccess - 子域的htaccess重定向
- oracle - 我希望这个触发器在审计表中插入数据并抛出错误。但这只会引发错误,但不会插入数据
- python - ModuleNotFoundError:Scrapy 中没有名为“”的模块
- chef-infra - 刀库刷新命令无法搜索查询
- excel - VBA - VBA 运行时无法打开工作表
- javascript - 使用 Ajax 插入和获取数据插入工作但 fetch 功能不工作
- html - 如何在悬停时将图标的颜色更改为白色
- javascript - 如何切换密码
- sequelize.js - Sequelize 配置读取错误的方言