解码 JSON 中的“意外字符”

Mau*_*mas 5 json dart flutter

以下是代码:

    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 请求,您需要设置responseTypeplain

 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 文档


小智 6

我不知道是不是这样,但是当我的 JSON 看起来像这样时,我遇到了类似的错误

[ { ... }, ]

而不是这样

[ { ... } ]

逗号导致了这个问题。