繁体   English   中英

Map <int, list<int> &gt; 转换为可编码 object 失败</int,>

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM