【问题标题】:Map<int, List<int>> convert to encodable object failedMap<int, List<int>> 转换为可编码对象失败
【发布时间】:2022-01-21 11:38:33
【问题描述】:

我正在尝试将 Map 转换为 json,所以我可以保存它。 可悲的是我收到了这个错误

E/flutter ( 9386): [ERROR:flutter/lib/ui/ui_dart_state.cc(209)] Unhandled Exception: Converting object to an encodable object failed: Instance of 'AppState'

我不明白我必须如何改变我的功能

  String bookProgressToJson(Map<int, List<int>> data) =>
  json.encode(Map.from(data).map((k, v) =>
      MapEntry<String, dynamic>(k, List<dynamic>.from(v.map((x) => x)))));

有什么想法吗?

【问题讨论】:

  • 看看是否解决不了json.encode(data.toString());
  • 谢谢它工作正常,不知道为什么我尝试了这么复杂的方法^^ 但是现在有另一个问题我的字符串看起来和它应该的一模一样,但现在我必须将它转换回 Map "{0: [1, 2, 3, 4, 5], 1: [1, 2, 3, 4, 5], 2: [1, 2, 3, 4, 5]}",跨度>
  • 错误信息是说编码器不知道如何转换AppState。该类是否有toJson 方法?你能包括源代码吗?

标签: json flutter dart


【解决方案1】:

JSON 只对以 String 为键的地图进行编码。看看冒号前的内容如何显示为字符串:https://www.json.org/json-en.html

所以,如果你想对Map&lt;int, something&gt; 进行编码,你可以将int 转换为String,这样你就可以对其进行编码,并在解码后将其转换回来,如下所示:

import 'dart:convert';

void main() {
  final data = <int, List<int>>{
    0: [1, 2, 3, 4, 5],
    1: [2, 3, 4, 5, 6],
    2: [5, 4, 3, 2, 1],
  };

  final d2 = data.map<String, List<int>>(
    (k, v) => MapEntry(k.toString(), v), // convert int to String
  );

  final j = json.encode(d2);

  final d3 = json.decode(j) as Map<String, dynamic>;

  final d4 = d3.map<int, List<int>>(
    (k, v) => MapEntry(int.parse(k), v.cast<int>()), // parse String back to int
  );
  print(d4);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-21
    • 1970-01-01
    • 1970-01-01
    • 2019-01-01
    • 2013-01-24
    • 2020-12-31
    • 2018-04-28
    • 1970-01-01
    相关资源
    最近更新 更多