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
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());
谢谢它工作正常,不知道为什么我尝试了这么复杂的方法^^ 但是现在有另一个问题我的字符串看起来和它应该的一模一样,但现在我必须将它转换回 MapAppState
。该类是否有toJson
方法?你能包括源代码吗?
【参考方案1】:
JSON 只对以 String
为键的地图进行编码。看看冒号前的内容如何显示为字符串:https://www.json.org/json-en.html
所以,如果你想对Map<int, something>
进行编码,你可以将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>> 转换为可编码对象失败的主要内容,如果未能解决你的问题,请参考以下文章