以下是代码:
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);
}
Run Code Online (Sandbox Code Playgroud)
Android Studio 产生的错误:
[VERBOSE-2:dart_error.cc(16)] 未处理的异常:FormatException: Unexpected character (at character 3)
知道如何使它工作吗?
这是 Redux 生成的 Json 的输出。
Baw*_*tha 13
如果有人来到这里并且您正在使用dio包来调用 http 请求,您需要设置responseType为plain
BaseOptions options = new BaseOptions(
baseUrl: "<URL>",
responseType: ResponseType.plain
);
Run Code Online (Sandbox Code Playgroud)
rmt*_*zie 11
您的代码以及您尝试解析的字符串存在问题。我会尝试弄清楚该字符串是在哪里生成的,或者如果您自己做,也可以发布该代码。
有效的 Json 在名称周围使用 "",在字符串周围使用 ""。您的字符串在名称和 '' 周围不使用任何内容。
如果将其粘贴到 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");
}
}
Run Code Online (Sandbox Code Playgroud)
您的代码的问题在于您希望解码器直接解码为列表。它不会这样做;它将解码为一个dynamic恰好是List<dynamic>其项目恰好是 的Map<String, dynamic>。
有关如何在 Dart 中处理 json 的信息,请参阅flutter 的 Json 文档。
| 归档时间: |
|
| 查看次数: |
32438 次 |
| 最近记录: |