Flutter json 1处的意外字符

Posted

技术标签:

【中文标题】Flutter json 1处的意外字符【英文标题】:Flutter json Unexpected character at 1 【发布时间】:2021-08-29 13:28:20 【问题描述】:

我正在处理一个项目,在尝试使用 json.decode 方法解码一些 JSON 数据时遇到此错误。

错误

E/flutter (26652): [ERROR:flutter/lib/ui/ui_dart_state.cc(186)] 未处理异常:FormatException:意外字符(在字符 1) E/flutter (26652): 'StreamedResponse' 的实例 E/颤振(26652):^ E/颤振(26652): E/flutter (26652): #0 _ChunkedJsonParser.fail (dart:convert-patch/convert_patch.dart:1404:5) E/flutter (26652): #1 _ChunkedJsonParser.parseNumber (dart:convert-patch/convert_patch.dart:1271:9) E/flutter (26652): #2 _ChunkedJsonParser.parse (dart:convert-patch/convert_patch.dart:936:22) E/flutter (26652): #3 _parseJson (dart:convert-patch/convert_patch.dart:40:10) E/flutter (26652): #4 JsonDecoder.convert (dart:convert/json.dart:506:36) E/flutter (26652): #5 JsonCodec.decode (dart:convert/json.dart:157:41) E/颤动​​(26652):#6

userModel.dart

import 'dart:convert';

import 'package:shared_preferences/shared_preferences.dart';

class UserModel 
  String id;
  String name;
  String email;

  UserModel(this.id, this.name, this.email);

  static UserModel sessionUser;

  factory UserModel.fromjson(Map<String, dynamic> i) =>
      UserModel(
        id: i['id'], 
        name: i['name'], 
        email: i['email']
        );

  Map<String, dynamic> toMap() => 
    'id': id, 
    'name': name, 
    'email': email
    ;

  static void saveUser(UserModel user) async 
    SharedPreferences pref = await SharedPreferences.getInstance();
    var data = jsonEncode(user.toMap());
    pref.setString('user', data);
    // ignore: deprecated_member_use
    pref.commit();
  

  static  void getUser() async 
    SharedPreferences pref = await SharedPreferences.getInstance();
    String data = pref.getString('user');
    if (data != null) 
      var decode = json.decode(data); // <------ error here
      if (data.isNotEmpty) 
        var user = UserModel.fromjson(decode);
        sessionUser = user;
      
     else 
      sessionUser = null;
    
  

  static void logOut() async 
    SharedPreferences p = await SharedPreferences.getInstance();
    p.setString('user', "");
    sessionUser = null;
    // ignore: deprecated_member_use
    p.commit();
  

如您所见,错误发生在 getUser 方法上,同时使用 SharedPreferences 解码保存的变量

HomePage.dart

import 'package:flutter/material.dart';
import 'package:mostapha_app/ka/screens/sign_in/components/sign_form.dart';
import 'package:mostapha_app/models/userModel/userModel.dart';
import 'package:mostapha_app/screens/Home/home.dart';
import 'package:mostapha_app/screens/Home/welcom.dart';
import 'package:mostapha_app/screens/autntification/UserRegister.dart';
import 'package:mostapha_app/screens/autntification/login.dart';
import 'package:mostapha_app/screens/autntification/conducteurRegister.dart';

class HomePage extends StatefulWidget 
  @override
  State<StatefulWidget> createState() => _HomePageState();


class _HomePageState extends State<HomePage> 
  bool visibel = true, login = false;
  isconnected() async 
    // ignore: await_only_futures
    await UserModel.getUser();
    if (UserModel.sessionUser == null) 
      setState(() 
        login = false;
      );
     else 
      setState(() 
        login = true;
      );
    
  

  tooggle() 
    setState(() 
      visibel = !visibel;
    );
  

  isLogin() 
    setState(() 
      login = !login;
    );
  

  @override
  void initState() 
    super.initState();
    isconnected();
  

  @override
  Widget build(BuildContext context) 
    return login
        ? Home(login: isLogin)
        : visibel
            ? 
            LogIn(tooggle, isLogin)
            : UserRegester(tooggle, isLogin);
  

如果有人知道为什么会发生此错误,我将不胜感激。

【问题讨论】:

【参考方案1】:

我第一次开始 Flutter 编程时遇到了同样的问题。

我认为您的代码可能是正确的。我不确定你的代码,它似乎是正确的。但我绝对确定您的数据一定不正确。我有同样的错误,我终于找到了问题的根源。您必须检查数据来源。您可能在用户保存部分出错?

【讨论】:

以上是关于Flutter json 1处的意外字符的主要内容,如果未能解决你的问题,请参考以下文章

Flutter FormatException:意外字符(在字符 1 处)

json.decode() 输入意外结束(在字符 1 处)

在 BigQuery 中读取时,未定义行 XXXX、列 xx-xx 处的 JSON 输入意外结束

SyntaxError:JSON.parse 处的 JSON 输入意外结束 [重复]

NodeJs JSON.parse-SyntaxError:JSON中位置0处的意外令牌u

未捕获的 SyntaxError:JSON.parse (<anonymous>) 处的 JSON 输入意外结束