【问题标题】:How to encode this map Map<int, List<int>>?如何编码这个地图 Map<int, List<int>>?
【发布时间】:2022-01-19 13:07:18
【问题描述】:

嗨,我在编码这种地图时遇到问题:Map> blocksMap 有什么建议吗?原因 json.encode(blocksMap) 给出错误 Converting object to an encodable object failed: _LinkedHashMap

这是我尝试编码的数据示例:

地图> blocksMap:

{
0: [18, 117, 26, 200, 4, 30, 43, 110],
1: [18, 117, 26, 200, 4, 30, 43, 110], 
2: [18, 117, 26, 200, 4, 30, 43, 110], 
3: [18, 117, 26, 200, 4, 30, 43, 110], 
4: [18, 117, 26, 200, 4, 30, 43, 110], 
5: [18, 117, 26, 200, 4, 30, 43, 110], 
6: [18, 117, 26, 200, 4, 30, 43, 110], 
7: [18, 117, 26, 200, 4, 30, 43, 110], 
8: [18, 117, 26, 200, 4, 30, 43, 110], 
9: [18, 117, 26, 200, 4, 30, 43, 110], 
10: [18, 117, 26, 200, 4, 30, 43, 110], 
11: [18, 117, 26, 200, 4, 30, 43, 110]
}

建议如何编码这张地图会很棒,谢谢!

【问题讨论】:

  • 我设法通过将 Map 更改为 Map> 来解决编码部分
  • 那你有什么问题?对于您的错误,这是因为 JSON 仅允许 String 成为地图中的键。因此,由于您的数据结构使用int 作为键值,因此无法直接将其转换为 JSON。因此,如果您想将数据结构保存为 JSON 并稍后再转换回来,则需要对数据结构进行一些转换。
  • 是的,当我将映射键从 int 更改为 string 时它开始工作,所以我解决了它

标签: flutter dart


【解决方案1】:

您可以将地图转换为字符串地图和字符串列表

  final Map<String, List<int>> blocksMapOfIntToString = {
    for (var item in blocksMap.entries) '${item.key}': item.value,
  };

然后编码

  final encoded = jsonEncode(blocksMapOfIntToString);

只要你需要你的数据,你就可以解码

  final decoded = jsonDecode(encoded);

然后转换回来

  final Map<int, List<int>> blocksMapOfStringToInt = {
    for (var item in decoded.entries)
      int.parse(item.key): List<int>.from(item.value),
  };

【讨论】:

  • 您不需要同时转换列表中的int 值。只是映射中的键必须是String。
  • 已更新,谢谢!
猜你喜欢
  • 2022-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多