![](/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.