E/flutter (30548): [ERROR:flutter/lib/ui/ui_dart_state.cc(186)] Unhandled Exception: FormatException: Unexpected character (at character 2)
E/flutter (30548): {data: [{image: http://gank.io/images/cfb4028bfead41e8b6e34057364969d1, tit...
E/flutter (30548): ^
E/flutter (30548):
E/flutter (30548): #0 _ChunkedJsonParser.fail (dart:convert-patch/convert_patch.dart:1404:5)
E/flutter (30548): #1 _ChunkedJsonParser.parse (dart:convert-patch/convert_patch.dart:934:48)
E/flutter (30548): #2 _parseJson (dart:convert-patch/convert_patch.dart:40:10)
E/flutter (30548): #3 JsonDecoder.convert (dart:convert/json.dart:506:36)
E/flutter (30548): #4 JsonCodec.decode (dart:convert/json.dart:157:41)
E/flutter (30548): #5 jsonDecode (dart:convert/json.dart:96:10)
E/flutter (30548): #6 testRouterState.build.<anonymous closure> (package:flutter_app/main.dart:53:54)
E/flutter (30548): <asynchronous suspension>
E/flutter (30548):
以上为报错信息,使用的是dio网络请求框架和json_serializable
原来的写法 没有设置任何参数
Dio dio = new Dio();
var response = await dio.get('https://gank.io/api/v2/banners');
var _BannerInfo =
Banners.fromJson(jsonDecode(response.data.toString()));
print(_BannerInfo.status);
往dio源码里面找 里面有个参数是
late BaseOptions options;
问题就是这个responseType了 继续看responseType
json:返回json格式
stream:以流的形式返回
plain:以字符串的方式返回
bytes:以字节的方式返回
可以看到返回值默认使用的是json 在返回过程中又进行了一次包装 导致解析失败 那么只需要设置option的参数即可 改成默认的字符串plain
Dio dio = new Dio();
var response = await dio.get('https://gank.io/api/v2/banners',
options: Options(responseType: ResponseType.plain));
var _BannerInfo =
Banners.fromJson(jsonDecode(response.data.toString()));
print(_BannerInfo.data[0].title);
再次运行 已经成功打印
Performing hot reload...
Syncing files to device Redmi K20 Pro...
Reloaded 0 libraries in 329ms.
I/flutter (31538): 干货集中营新版更新