Map<int, List<int>> 转换为可编码对象失败

Posted

技术标签:

【中文标题】Map<int, List<int>> 转换为可编码对象失败【英文标题】:Map<int, List<int>> convert to encodable object failed 【发布时间】: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 方法?你能包括源代码吗? 【参考方案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);

【讨论】:

以上是关于Map<int, List<int>> 转换为可编码对象失败的主要内容,如果未能解决你的问题,请参考以下文章

需要一个“int”类型的值,但得到了 list<Map<string, dynamic>> 类型之一

LRU设计

map/vector遍历删除

LRU: C++代码实现

LRU: C++代码实现

LRU: C++代码实现