![](/img/trans.png)
[英]How to convert Map<int, Map<int, Map<int, Map<int, int>>>> to json
[英]Map<int, List<int>> convert to encodable object failed
我正在尝试将 Map<int, List int> 转换为 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'
我不明白我必须如何改变我的 function
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<int List>
我试过Map<String, List<int>> emptyFromJson(String str) => Map.from(json.decode(str)).map((k, v) => MapEntry<String, List<int>>(k, List<int>.from(v.map((x) => x))));
但这不起作用
我的下一个想法是这样的var dataSp = json["downloadedContent"].split(','); dataSp.forEach( (element) => downloadedContent[element.split(':')[0]] = element.split(':')[1]);
var dataSp = json["downloadedContent"].split(','); dataSp.forEach( (element) => downloadedContent[element.split(':')[0]] = element.split(':')[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);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.