簡體   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