Flutter 如果不存在元素,为什么list.length返回1个大小
我在返回列表大小时遇到了一个werid问题。 服务器将Flutter 如果不存在元素,为什么list.length返回1个大小,flutter,dart,Flutter,Dart,我在返回列表大小时遇到了一个werid问题。 服务器将列表作为返回类型。作为对颤振请求的响应,我得到了弦 I/flutter ( 4454): ["Email is already taken","Phone number is already taken","Username is already taken"] I/flutter ( 4454): [Email is already taken, Phone number is a
列表
作为返回类型。作为对颤振请求的响应,我得到了弦
I/flutter ( 4454): ["Email is already taken","Phone number is already taken","Username is already taken"]
I/flutter ( 4454): [Email is already taken, Phone number is already taken, Username is already taken]
I/flutter ( 4454): 3
I/flutter ( 4454): false
因此,我将其转换为列表,删除“
和[
和]
,如下所示:
print(response.body);
List<String> list = response.body
.substring(1, response.body.length - 1)
.replaceAll('"', '')
.split(',')
.toList();
print(list);
print(list.length);
print(list.length == 0);
它返回1个大小,尽管列表中没有元素
你能告诉我我做错了什么吗?还有为什么服务器端返回
列表时response.body包含字符串?将此更改为.substring(1,response.body.length-1)
.substring(0,response.body.length-1)
您的列表确实包含一个元素,即值为:''
的空字符串。打印列表时您没有看到它的原因是,Dart在打印字符串时没有向字符串添加任何内容(例如,用将其封装为“
)
我们可以在这个例子中看到这一点:
void main() {
final list = [''];
print(list); // []
for (var i = 0; i < list.length; i++) {
print('$i = ${list[i]}'); // 0 =
}
}
void main(){
最终列表=[''];
打印(列表);//[]
对于(变量i=0;i
在我看来,您正在尝试手动解析一些JSON。您可以在示例中执行以下操作,而不是自己解析:
import 'dart:convert';
void main() {
const input = r'["Email is already taken","Phone number is already taken","Username is already taken"]';
print(parseJsonList(input));
// [Email is already taken, Phone number is already taken, Username is already taken]
}
List<String> parseJsonList(String json) =>
(jsonDecode(json) as List<dynamic>).cast<String>();
导入'dart:convert';
void main(){
const input=r'[“电子邮件已被占用”、“电话号码已被占用”、“用户名已被占用”];
打印(parseJsonList(输入));
//[电子邮件已发送,电话号码已发送,用户名已发送]
}
List parseJsonList(字符串json)=>
(jsonDecode(json)as List).cast();
但如果我更改为.substring(0…)
则如果列表包含某些元素,则我有双“[”=[[电子邮件已被占用,电话号码已被占用,用户名已被占用]`好的,这部分我帮不了你。问题是为什么一个看似空的列表会有一个长度。:)好的。但是为什么我有这个空字符串?我不明白。艾哈迈德·拉扎的答案不起作用。@traki111你为什么要自己解析而不是用JSON解析器解码?因为JSON.decode是打开列表
非常不方便。有更好的解码器吗?它不工作。
import 'dart:convert';
void main() {
const input = r'["Email is already taken","Phone number is already taken","Username is already taken"]';
print(parseJsonList(input));
// [Email is already taken, Phone number is already taken, Username is already taken]
}
List<String> parseJsonList(String json) =>
(jsonDecode(json) as List<dynamic>).cast<String>();