【问题标题】:decode stored json result string in shared preferences在共享首选项中解码存储的 json 结果字符串
【发布时间】:2021-12-16 18:25:44
【问题描述】:

当应用程序启动时,它会触发 API 调用,在我的情况下,我想存储响应数据以供以后使用,因此我为此使用了共享首选项并将响应数据存储为字符串。现在我想从共享首选项中存储的字符串中正确解码要使用的数据。

这是我如何将数据转换为字符串,

SharedPreferences prefs = await SharedPreferences.getInstance();

Response response = await _dio.post(
        _baseUrl,
        data: {"index": indexNum, "password": password},
        options: Options(contentType: Headers.formUrlEncodedContentType),
      );

      if (response.statusCode == 200) {
        var result = response.data;
        
        //convert result data to string
        var resultData = Result.encode(result);
        
        // store the resultData in shared_preferences
        prefs.setString('results', resultData);
        
      }

编码方法,

class Result {
  Result({
    required this.table,
    required this.data,
  });

  String table;
  List<Data> data;

  factory Result.fromJson(Map<String, dynamic> json) => Result(
        table: json["table"],
        data: List<Data>.from(json["data"].map((x) => Data.fromJson(x))),
      );

  //encode method
  static String encode(List<dynamic> results) => json.encode(
        results.map((result) => result.toString()).toList(),
      );
      
}

这是我从字符串中解码数据的方法,

  getData() async {
  
    SharedPreferences prefs = await SharedPreferences.getInstance();
    
    String? resultData = prefs.getString('results');
    
    List<dynamic> decodedJson = jsonDecode(resultData!);
    
    print(decodedJson);
 
  }

结果数据字符串,

解码后的结果数据字符串,

我是 Flutter 的新手,我想要的是从模型中解码这些数据的正确方法。以下是我的模型类。

import 'dart:convert';

class Result {
  Result({
    required this.table,
    required this.data,
  });

  String table;
  List<Data> data;

  factory Result.fromJson(Map<String, dynamic> json) => Result(
        table: json["table"],
        data: List<Data>.from(json["data"].map((x) => Data.fromJson(x))),
      );

  static String encode(List<dynamic> results) => json.encode(
        results.map((result) => result.toString()).toList(),
      );
}

class Data {
  Data({
    required this.subjectName,
    required this.year,
    required this.credits,
    required this.sOrder,
    required this.result,
    required this.onlineAssignmentResult,
  });

  String subjectName;
  String year;
  String credits;
  String sOrder;
  String result;
  String onlineAssignmentResult;

  factory Data.fromJson(json) => Data(
        subjectName: json["subject_name"],
        year: json["year"],
        credits: json["credits"],
        sOrder: json["s_order"],
        result: json["result"],
        onlineAssignmentResult: json["online_assignment_result"],
      );
}

感谢您的时间和帮助。

【问题讨论】:

    标签: json flutter dart mobile dio


    【解决方案1】:

    您的 JSON 语法错误,Flutter 无法使用 jsonDecode() 进行解码

    所有字符串和变量名都需要用"或'括起来

    即{subject_name: 应该是 {"subject_name":

    【讨论】:

      猜你喜欢
      • 2015-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-17
      • 2021-11-08
      • 2011-09-03
      • 2017-08-05
      相关资源
      最近更新 更多