首页 > 解决方案 > Flutter 如何在 dart 中使用 json decode 将字符串转换为列表

问题描述

我有下面的列表,我想将其转换并存储为字符串,以便以后需要它时,我会将字符串解码回列表,以便将其用作参数。

 List allTasks = [
   {"project-name":"My First Project"},
   {"date-time":"12 Mar 2021Z 12:34:05 am"},
   {"people":["John","Doe"]},
   {"project-body":[
    {
     "id":"0",
     "color": Colors.transparent,
     "name":"hello amigo",
     "sub-children":[
       {
        "id":"0",
        "color": Colors.transparent,
        "type":"text",
        "state":"waiting",    
        "mediaUrl":"",             
         "name":"Heya its me",
         "hasMessage":false,
         "people":[
           {"person-id":"id110",
            "profile-pic":"",
           }
         ]
       },       
     ],
    },     
   ],
  }
 ];

此代码用于将其存储在 sharedPreference首先我将列表转换为字符串然后传递它。

  void storeValuesLocally(String mainlist)async{
  SharedPreferences prefs = await SharedPreferences.getInstance();
  String myToJson = json.encode(mainlist);
  await prefs.setString('main-list', myToJson);  
  }

下面我试图将字符串解码回列表

  void getAndSetTaskValues()async{
  SharedPreferences prefs = await SharedPreferences.getInstance();
  String values = (prefs.getString('main-list') ?? [].toString());
  var castedToList = json.decode(values);
    print(castedToList[0].runtimeType); // String
  }

我的问题 每当我尝试将解码结果分配给列表时,它都会引发错误。这是因为castedToList它是一个字符串,因为当我检查类型时它是一个字符串。我该如何解决这个问题。

标签: flutterdart

解决方案


不要将其转换为字符串然后对其进行编码。因为解码它会返回一个字符串,因为它现在发生在你身上。

相反,按原样对列表进行编码。

void storeValuesLocally(List mainlist)

推荐阅读