这是代码,
static TodoState fromJson(json) {
JsonCodec codec = new JsonCodec();
List<Todo> data = codec.decode(json["todos"]);
VisibilityFilter filter = codec.decode(json['visibilityFilter']);
return new TodoState(todos: data,
visibilityFilter: filter);
}
Android Studio提供给我的错误低于
[VERBOSE-2:dart_error.cc(16)] Unhandled exception:
FormatException: Unexpected character (at character 3)
知道如何让它有效吗?
这是Json的输出,Redux给我
答案 0 :(得分:3)
您的代码以及您尝试解析的字符串存在问题。我试图弄清楚该字符串的生成位置,或者您是否自己发布了该代码。
有效的Json使用&#34;&#34;围绕名字和&#34;&#34;围绕弦乐。你的字符串在名字和&#39;&#39;之间没有任何用处。围绕着弦乐。
如果将其粘贴到DartPad中,第一个将错误输出,而第二个将成功:
import 'dart:convert';
void main() {
JsonCodec codec = new JsonCodec();
try{
var decoded = codec.decode("[{id:1, text:'fdsf', completed: false},{id:2, text:'qwer', completed: true}]");
print("Decoded 1: $decoded");
} catch(e) {
print("Error: $e");
}
try{
var decoded = codec.decode("""[{"id":1, "text":"fdsf", "completed": false},{"id":2, "text":"qwer", "completed": true}]""");
print("Decoded 2: $decoded");
} catch(e) {
print("Error: $e");
}
}
您的代码的问题是您希望解码器直接解码到List。它不会这样做;它会解码为dynamic
恰好是List<dynamic>
,其项目恰好是Map<String, dynamic>
。
有关如何在Dart中处理json的信息,请参阅flutter's Json documentation。
答案 1 :(得分:1)
我也有类似的错误类型,请确保.decode方法的参数不应为空对象。
try {
if(json["todos"].isNotEmpty) {
List<Todo> data = codec.decode(json["todos"]);
}
if(json["todos"].isNotEmpty) {
VisibilityFilter filter = codec.decode(json['visibilityFilter']);
}
}
catch(e) {
print(e);
}
尝试一下,希望它对您有用。
答案 2 :(得分:1)
如果有人来到这里,并且您正在使用dio
包调用http请求,则需要将responseType
设置为plain
BaseOptions options = new BaseOptions(
baseUrl: "<URL>",
responseType: ResponseType.plain
);
答案 3 :(得分:0)
我不知道是不是这种情况,但是当我的JSON看起来像这样时,我遇到了类似的错误
[ { ... }, ]
不是这样
[ { ... } ]
逗号引起了问题。