json - 转换列表列出
问题描述
我正在从服务器获取数据。运行runtimeType
显示它们具有 List 类型。目前我正在cast<String>()
使用List<String>
.
但这是唯一的\正确的方式吗?
var value = await http.get('http://127.0.0.1:5001/regions');
if(value.statusCode == 200) {
return jsonDecode(value.body)['data'].cast<String>();
}
解决方案
有多种方法,具体取决于如果列表包含非字符串,您希望多快出现错误,以及您将如何使用该列表。
list.cast<String>()
在原始列表周围创建一个惰性包装器。它在每次读取时检查该值实际上是 aString
。如果您打算经常阅读,那么所有这些类型检查可能会很昂贵,并且如果您希望在列表的最后一个元素不是字符串的情况下尽早出错,那么它不会为您做到这一点。List<String>.from(list)
创建一个新列表String
并将每个元素复制list
到新列表中,并检查它实际上是一个String
. 如果一个值实际上不是一个字符串,这种方法会很早就出错。创建后,不再进行类型检查。另一方面,创建一个新列表需要额外的内存。[for (var s in list) s as String]
,[... list.cast<String>()]
,<String>[for (var s in list) s]
,<String>[... list]
是创建新字符串列表的所有其他方法。最后两个依赖于隐式向下转换dynamic
,前两个使用显式转换。
我建议尽可能使用列表文字。<String>[...list]
在这里,如果您想要一个新列表,我可能会选择最小的版本。否则.cast<String>()
就好了。
推荐阅读
- php - php - 查找具有模式索引的数组值
- wso2 - WSO2 ESB - 切换调解器,带数字的条件
- javascript - How to find by 2 geopoints from mongodb using mongoose?
- cntk - CNTK - reshape an axis to matrix
- android - 评论的名称和时间戳 Firebase 数据库的顺序不正确
- c# - http.get 返回什么以及如何将其转换为对象
- sql - 等于操作中“Latin1_General_CI_AS”和“SQL_Latin1_General_CP1_CI_AS”之间的冲突
- c++ - 在大型代码库中替换 c++ 基本类型
- java - java swing 是否适用于 java 9+ 以及关于 netbeans 支持的内容
- python - 仅在函数内更改 np.seterr 行为